main
syneffort 2 years ago
parent a8be3eb3a4
commit 7a8c240d70
  1. 9
      Chat/Client/Singleton.cs
  2. 41
      Chat/Core/PServer.cs

@ -44,6 +44,9 @@ namespace Client
Socket socket = (Socket)sender;
byte[] headerBuffer = new byte[2];
try
{
while (true)
{
// header buffer
@ -108,5 +111,11 @@ namespace Client
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
Environment.Exit(1);
}
}
}
}

@ -26,11 +26,18 @@ namespace Core
public async Task StartAsync()
{
while (true)
{
try
{
Socket clientSocket = await serverSocket.AcceptAsync();
Console.WriteLine($"[{DateTime.Now}] Accept client: {clientSocket.RemoteEndPoint}");
ThreadPool.QueueUserWorkItem(RunAsync, clientSocket);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
private async void RunAsync(object? sender)
@ -45,6 +52,8 @@ namespace Core
string nickname = "";
string roomName = "";
try
{
while (true)
{
// header buffer
@ -52,7 +61,7 @@ namespace Core
if (n1 < 1)
{
Console.WriteLine($"[{DateTime.Now}] Disconnect client - {clientSocket.RemoteEndPoint}");
clientSocket.Dispose();
await Remove(id, nickname, roomName, clientSocket);
return;
}
else if (n1 == 1)
@ -183,5 +192,35 @@ namespace Core
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
await Remove(id, nickname, roomName, clientSocket);
}
}
private async Task Remove(string id, string nickname, string roomName, Socket clientSocket)
{
Clients.TryRemove(id, out _);
if (Rooms.TryGetValue(roomName, out var room))
{
UserLeavePacket packet = new UserLeavePacket(nickname);
room.Users.TryRemove(id, out _);
if (room.Users.IsEmpty)
Rooms.TryRemove(roomName, out _);
roomName = "";
foreach (var user in room.Users)
{
if (Clients.TryGetValue(user.Key, out var otherClient))
await otherClient.SendAsync(packet.Serialize(), SocketFlags.None);
}
}
clientSocket.Dispose();
}
}
}

Loading…
Cancel
Save