diff --git a/MistoxServer/Server/MistoxServer.cs b/MistoxServer/Server/MistoxServer.cs index ce85ed8..091e056 100644 --- a/MistoxServer/Server/MistoxServer.cs +++ b/MistoxServer/Server/MistoxServer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Concurrent; +using System.Collections.Generic; using System.Net; using System.Threading.Tasks; using Mistox.ResevedPackets; @@ -27,7 +28,6 @@ namespace Mistox.Server { Console.WriteLine( "The Server is initilized and waiting for clients to connect at port : " + ListenerAddress.Port ); } - async Task ProcessAuthRequest(ServerConnection user, UserAuthPacket packet) { packet.ServerName = ServerName; if (packet.ConnectionKey == ConnectionKey) { @@ -39,7 +39,27 @@ namespace Mistox.Server { } else { packet.AuthSuccessful = -1; } - await SendClient(packet.UserName, packet); + await user.Send(packet); + } + + async Task BuildServerList(ServerConnection user, HeartbeatPacket packet) { + packet.ServerList = new List(); + foreach( ServerConnection cur in Connections.Values) { + packet.ServerList.Add( new UserTableObject() { + UserName = cur.UserName, + Position = cur.Position, + IpAddress = cur.getRemote() + } ); + } + await user.Send( packet ); + } + + async Task RunAsync(Func work) { + try{ + await work(); + } catch (Exception ex) { + Console.WriteLine($"Error during background packet processing: {ex.Message}"); + } } // Functions @@ -49,17 +69,18 @@ namespace Mistox.Server { onUserConnected?.Invoke( user ); } - public event Action onDataReceived; + public event Action onDataReceived; public void InvokeDataReceived( ServerConnection user, dynamic data ){ - switch (data as object) { - case UserAuthPacket packet: - if (!user.IsAuthenticated) { - Task.Run(async () => { - try { - await ProcessAuthRequest(user, packet); - } catch {} - }); - } + switch (data) { + case UserAuthPacket packet when !user.IsAuthenticated: + _ = RunAsync(async () => { + await ProcessAuthRequest(user, packet); + }); + break; + case HeartbeatPacket packet when user.IsAuthenticated: + _ = RunAsync(async () => { + await BuildServerList(user, packet); + }); break; case null: Console.WriteLine("Received a null packet.");