YapperDesktop/Yapper/Net/Server.cs
2025-02-24 20:07:27 +01:00

76 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using YapperClient.Net.IO;
namespace YapperClient.Net
{
class Server
{
TcpClient _client;
public PacketReader PacketReader;
public event Action connectedEvent;
public event Action msgReceivedEvent;
public event Action userDisconnectedEvent;
public Server() {
_client = new TcpClient();
}
public void ConnectToServer(string userName)
{
if (!_client.Connected)
{
_client.Connect("127.0.0.1", 7891);
PacketReader = new PacketReader(_client.GetStream());
if (!string.IsNullOrEmpty(userName))
{
var connectPacket = new PacketBuilder();
connectPacket.WriteOpCode(0);
connectPacket.WriteString(userName);
_client.Client.Send(connectPacket.GetPacketBytes());
}
ReadPackets();
}
}
private void ReadPackets()
{
Task.Run(() => {
while (true)
{
var opcode = PacketReader.ReadByte();
switch (opcode)
{
case 1:
connectedEvent?.Invoke();
break;
case 5:
msgReceivedEvent?.Invoke();
break;
case 10:
userDisconnectedEvent?.Invoke();
break;
default:
Console.WriteLine("ah yes ...");
break;
}
}
});
}
public void SendMessageToServer(string message)
{
var messagePacket = new PacketBuilder();
messagePacket.WriteOpCode(5);
messagePacket.WriteString(message);
_client.Client.Send(messagePacket.GetPacketBytes());
}
}
}