diff --git a/Server/Models/ServerCommunication.cs b/Server/Models/ServerCommunication.cs index 0447bd2..1d22c27 100644 --- a/Server/Models/ServerCommunication.cs +++ b/Server/Models/ServerCommunication.cs @@ -16,6 +16,7 @@ namespace Server.Models public bool Started = false; public List lobbies; private Dictionary> serverClientsInlobbies; + internal Action DisconnectClientAction; public Action newClientAction; @@ -99,8 +100,22 @@ namespace Server.Models public void ServerClientDisconnect(ServerClient serverClient) { - // remove from serverclientsinlobbies - // send leave message + Debug.WriteLine("[SERVERCOMM] handling disconnect"); + DisconnectClientAction?.Invoke(); + int id = -1; + foreach (Lobby l in serverClientsInlobbies.Keys) + { + if (serverClientsInlobbies[l].Contains(serverClient)) + { + id = l.ID; + }break; + } + + if (id != -1) + { + LeaveLobby(serverClient.User, id); + SendToAllExcept(serverClient, JSONConvert.ConstructLobbyLeaveMessage(id)); + } } public void SendToAllExcept(string username, byte[] message) @@ -111,6 +126,14 @@ namespace Server.Models } } + public void SendToAllExcept(ServerClient sc, byte[] message) + { + foreach (ServerClient s in serverClients) + { + if (s != sc) s.sendMessage(message); + } + } + public void SendToLobby(Lobby lobby, byte[] message) { foreach (Lobby l in lobbies) diff --git a/Server/ViewModels/MainViewModel.cs b/Server/ViewModels/MainViewModel.cs index ad06638..5d153b8 100644 --- a/Server/ViewModels/MainViewModel.cs +++ b/Server/ViewModels/MainViewModel.cs @@ -33,6 +33,10 @@ namespace Server.ViewModels { InformationModel.ClientsConnected++; }; + serverCommunication.DisconnectClientAction = () => + { + InformationModel.ClientsConnected--; + }; //BitmapImage onlineImg = new BitmapImage(new Uri(@"/img/online.png",UriKind.Relative)); //BitmapImage offlineImg = new BitmapImage(new Uri(@"/img/offline.png", UriKind.Relative));