From 24701f8bb351a7fe447a5d5dcd1318457c14dfba Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Wed, 21 Oct 2020 19:35:52 +0200 Subject: [PATCH] [FIX] fix users not being sent with lobbies --- Client/Client.cs | 1 + Client/ViewModels/ViewModel.cs | 16 ++++++++++++++-- Server/Models/ServerClient.cs | 2 ++ Server/Models/ServerCommunication.cs | 1 + SharedClientServer/JSONConvert.cs | 10 ++++++++-- SharedClientServer/Lobby.cs | 13 +++++++++++++ SharedClientServer/User.cs | 4 +++- 7 files changed, 42 insertions(+), 5 deletions(-) diff --git a/Client/Client.cs b/Client/Client.cs index f150349..6287824 100644 --- a/Client/Client.cs +++ b/Client/Client.cs @@ -99,6 +99,7 @@ namespace Client switch (lobbyIdentifier) { case LobbyIdentifier.LIST: + Debug.WriteLine("got lobbies list"); Lobbies = JSONConvert.GetLobbiesFromMessage(payload); OnLobbiesListReceived?.Invoke(); break; diff --git a/Client/ViewModels/ViewModel.cs b/Client/ViewModels/ViewModel.cs index 52b091e..bc0589b 100644 --- a/Client/ViewModels/ViewModel.cs +++ b/Client/ViewModels/ViewModel.cs @@ -72,13 +72,25 @@ namespace Client private void updateLobbies() { + Debug.WriteLine("updating lobbies..."); Lobby[] lobbiesArr = client.Lobbies; Application.Current.Dispatcher.Invoke(delegate { - foreach (Lobby lobby in lobbiesArr) + + for (int i = 0; i < lobbiesArr.Length; i++) { - _lobbies.Add(lobby); + Lobby lobby = lobbiesArr[i]; + Debug.WriteLine(lobby.PlayersIn); + if (i < _lobbies.Count && _lobbies[i].ID == lobby.ID) + { + _lobbies[i].Set(lobby); + } else + { + _lobbies.Add(lobbiesArr[i]); + } } + + }); } diff --git a/Server/Models/ServerClient.cs b/Server/Models/ServerClient.cs index 571a775..291b9eb 100644 --- a/Server/Models/ServerClient.cs +++ b/Server/Models/ServerClient.cs @@ -149,11 +149,13 @@ namespace Server.Models Lobby created = ServerCommunication.INSTANCE.HostForLobby(this.User); Debug.WriteLine("[SERVERCLIENT] created lobby"); sendMessage(JSONConvert.ConstructLobbyHostCreatedMessage(created)); + sendMessage(JSONConvert.ConstructLobbyListMessage(ServerCommunication.INSTANCE.lobbies.ToArray())); break; case LobbyIdentifier.JOIN: int id = JSONConvert.GetLobbyID(payload); ServerCommunication.INSTANCE.JoinLobby(this.User,id); sendMessage(JSONConvert.ConstructLobbyJoinSuccessMessage()); + sendMessage(JSONConvert.ConstructLobbyListMessage(ServerCommunication.INSTANCE.lobbies.ToArray())); break; } } diff --git a/Server/Models/ServerCommunication.cs b/Server/Models/ServerCommunication.cs index 03335fa..cfc9b8d 100644 --- a/Server/Models/ServerCommunication.cs +++ b/Server/Models/ServerCommunication.cs @@ -129,6 +129,7 @@ namespace Server.Models { bool succ; l.AddUser(user, out succ); + Debug.WriteLine("[SERVERCOMM] added user to lobby, now contains " + l.PlayersIn); if (!succ) { // TODO send lobby full message diff --git a/SharedClientServer/JSONConvert.cs b/SharedClientServer/JSONConvert.cs index 137892f..4f7812f 100644 --- a/SharedClientServer/JSONConvert.cs +++ b/SharedClientServer/JSONConvert.cs @@ -110,8 +110,14 @@ namespace SharedClientServer { dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json)); JArray lobbiesArray = payload.lobbies; - Debug.WriteLine(lobbiesArray.ToString()); - return lobbiesArray.ToObject(); + Debug.WriteLine("[JSONCONVERT] got lobbies from message" + lobbiesArray.ToString()); + Lobby[] lobbiesTemp = lobbiesArray.ToObject(); + Debug.WriteLine("lobbies in array: "); + foreach (Lobby l in lobbiesTemp) + { + Debug.WriteLine("players: " + l.PlayersIn); + } + return lobbiesTemp; } public static int GetLobbyID(byte[] json) diff --git a/SharedClientServer/Lobby.cs b/SharedClientServer/Lobby.cs index fc58731..2ddf501 100644 --- a/SharedClientServer/Lobby.cs +++ b/SharedClientServer/Lobby.cs @@ -68,12 +68,25 @@ namespace Client set { _playersIn = value; } } + public void Set(Lobby lobby) + { + this._id = lobby._id; + this._users = lobby._users; + this._maxPlayers = lobby._maxPlayers; + } + public int MaxPlayers { get { return _maxPlayers; } set { _maxPlayers = value; } } + public List Users + { + get { return _users; } + set { _users = value; } + } + } } diff --git a/SharedClientServer/User.cs b/SharedClientServer/User.cs index 6e95f64..35ec378 100644 --- a/SharedClientServer/User.cs +++ b/SharedClientServer/User.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.Text; @@ -10,6 +11,7 @@ namespace SharedClientServer private int _score; private bool _host; + [JsonConstructor] public User(string username, int score, bool host) { _username = username;