From 381c142eaa3f9e0048c641cd17f99a4c47ba33c3 Mon Sep 17 00:00:00 2001 From: Dogukan Date: Tue, 20 Oct 2020 23:54:29 +0200 Subject: [PATCH 1/3] [ADDITION] Added databinding to the chatbox function. Tried to broadcast the message, doesn't work yet. --- Client/Client.cs | 5 ++- Client/ViewModels/ViewModelGame.cs | 61 +++++++++++++++++++++++++- Client/Views/GameWindow.xaml | 9 +++- Client/Views/GameWindow.xaml.cs | 30 +++++-------- Client/Views/MainWindow.xaml.cs | 1 - SharedClientServer/ClientServerUtil.cs | 1 - SharedClientServer/User.cs | 1 + 7 files changed, 81 insertions(+), 27 deletions(-) diff --git a/Client/Client.cs b/Client/Client.cs index 6ba9b16..7dacd73 100644 --- a/Client/Client.cs +++ b/Client/Client.cs @@ -65,7 +65,6 @@ namespace Client } stream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(OnReadComplete), null); - } private void handleData(byte[] message) @@ -84,16 +83,18 @@ namespace Client string textUsername = combo.Item1; string textMsg = combo.Item2; //TODO display username and message in chat window - + Debug.WriteLine("Message username: {0}\t Message: {1}", textUsername, textMsg); break; case JSONConvert.LOBBY: // lobby data //TODO fill lobby with the data received break; + case JSONConvert.CANVAS: // canvas data break; + default: Debug.WriteLine("[CLIENT] Received weird identifier: " + id); break; diff --git a/Client/ViewModels/ViewModelGame.cs b/Client/ViewModels/ViewModelGame.cs index 2d12d4f..8365194 100644 --- a/Client/ViewModels/ViewModelGame.cs +++ b/Client/ViewModels/ViewModelGame.cs @@ -1,10 +1,69 @@ -using System.Collections.ObjectModel; +using GalaSoft.MvvmLight.Command; +using SharedClientServer; +using System.Collections.ObjectModel; using System.ComponentModel; +using System.Diagnostics; +using System.Windows.Input; namespace Client.ViewModels { class ViewModelGame : INotifyPropertyChanged { + ClientData data = ClientData.Instance; public event PropertyChangedEventHandler PropertyChanged; + public ObservableCollection Messages { get; } = new ObservableCollection(); + + private dynamic _payload; + + private string _username; + + private string _message; + public string Message + { + get + { + return _message; + } + set + { + _message = value; + } + } + public ICommand OnKeyDown { get; set; } + + public ViewModelGame() + { + if (_payload == null) + { + _message = ""; + } + else + { + _message = _payload.message; + _username = _payload.username; + } + OnKeyDown = new RelayCommand(ChatBox_KeyDown); + } + + private void ChatBox_KeyDown() + { + //if enter then clear textbox and send message. + if (Message != string.Empty) AddMessage(Message); + Message = string.Empty; + } + + internal void AddMessage(string message) + { + Messages.Add($"{data.User.Username}: {message}"); + + _payload = new + { + username = data.User.Username, + message = message + }; + + //Broadcast the message after adding it to the list! + data.Client.SendMessage(JSONConvert.GetMessageToSend(JSONConvert.MESSAGE, _payload)); + } } } diff --git a/Client/Views/GameWindow.xaml b/Client/Views/GameWindow.xaml index 592e646..6614197 100644 --- a/Client/Views/GameWindow.xaml +++ b/Client/Views/GameWindow.xaml @@ -48,8 +48,13 @@ - - + + + + + + + diff --git a/Client/Views/GameWindow.xaml.cs b/Client/Views/GameWindow.xaml.cs index aacc67e..ab30ebf 100644 --- a/Client/Views/GameWindow.xaml.cs +++ b/Client/Views/GameWindow.xaml.cs @@ -18,7 +18,7 @@ namespace Client.Views /// public partial class GameWindow : Window { - ClientData data = ClientData.Instance; + public GameWindow() { DataContext = new ViewModelGame(); @@ -82,7 +82,6 @@ namespace Client.Views // var deepCopy = System.Windows.Markup.XamlReader.Parse(xaml) as UIElement; // TEST.Children.Add(deepCopy); //} - } private void ClrPcker_Background_SelectedColorChanged_1(object sender, RoutedPropertyChangedEventArgs e) @@ -95,23 +94,14 @@ namespace Client.Views color = colorSelected; } - private void ChatBox_KeyDown(object sender, KeyEventArgs e) - { - //if enter then clear textbox and send message. - if (e.Key.Equals(Key.Enter)) - { - WriteToChat(ChatBox.Text); - ChatBox.Clear(); - } - } - - /* - * Writes the current client's message to the chatbox. - */ - private void WriteToChat(string message) - { - string user = data.User.Username; - SentMessage.AppendText($"{user}: {message}\n"); - } + ///* + // * Writes the current client's message to the chatbox. + // */ + //private void WriteToChat(string message) + //{ + // string user = data.User.Username; + // SentMessage.AppendText($"{user}: {message}\n"); + // data.User.Message = message; + //} } } diff --git a/Client/Views/MainWindow.xaml.cs b/Client/Views/MainWindow.xaml.cs index aa9cf2f..045eff7 100644 --- a/Client/Views/MainWindow.xaml.cs +++ b/Client/Views/MainWindow.xaml.cs @@ -32,7 +32,6 @@ namespace Client private void Button_Click(object sender, RoutedEventArgs e) { - Lobby lobbySelected = LobbyList.SelectedItem as Lobby; if(lobbySelected != null) { diff --git a/SharedClientServer/ClientServerUtil.cs b/SharedClientServer/ClientServerUtil.cs index f79c448..d9d30fe 100644 --- a/SharedClientServer/ClientServerUtil.cs +++ b/SharedClientServer/ClientServerUtil.cs @@ -18,6 +18,5 @@ namespace SharedClientServer Array.Copy(stringAsBytes, 0, res, 1, stringAsBytes.Length); return res; } - } } diff --git a/SharedClientServer/User.cs b/SharedClientServer/User.cs index 6e95f64..b2df398 100644 --- a/SharedClientServer/User.cs +++ b/SharedClientServer/User.cs @@ -9,6 +9,7 @@ namespace SharedClientServer private string _username; private int _score; private bool _host; + private string _message; public User(string username, int score, bool host) { From 74f8e868f6ac5560fd2c042a1f2685a7d52636f8 Mon Sep 17 00:00:00 2001 From: Dogukan Date: Wed, 21 Oct 2020 17:47:48 +0200 Subject: [PATCH 2/3] [ADDITION] servercommunication towards the client. Still in progress not functional because of a null exception when receiving the broadcast message. --- Client/Client.cs | 5 +++-- Client/ViewModels/ViewModelGame.cs | 18 +++++++++--------- Server/Models/ServerClient.cs | 12 ++++++++++++ SharedClientServer/JSONConvert.cs | 2 +- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Client/Client.cs b/Client/Client.cs index 7dacd73..c44eca6 100644 --- a/Client/Client.cs +++ b/Client/Client.cs @@ -69,7 +69,7 @@ namespace Client private void handleData(byte[] message) { - byte id = message[0]; + byte id = message[4]; byte[] payload = new byte[message.Length - 1]; Array.Copy(message, 1, payload, 0, message.Length - 1); switch (id) @@ -83,7 +83,8 @@ namespace Client string textUsername = combo.Item1; string textMsg = combo.Item2; //TODO display username and message in chat window - Debug.WriteLine("Message username: {0}\t Message: {1}", textUsername, textMsg); + + Debug.WriteLine("[CLIENT] User name: {0}\t User message: {1}", textUsername, textMsg); break; case JSONConvert.LOBBY: diff --git a/Client/ViewModels/ViewModelGame.cs b/Client/ViewModels/ViewModelGame.cs index 8365194..8af8af4 100644 --- a/Client/ViewModels/ViewModelGame.cs +++ b/Client/ViewModels/ViewModelGame.cs @@ -33,15 +33,15 @@ namespace Client.ViewModels public ViewModelGame() { - if (_payload == null) - { - _message = ""; - } - else - { - _message = _payload.message; - _username = _payload.username; - } + //if (_payload == null) + //{ + // _message = ""; + //} + //else + //{ + // _message = _payload.message; + // _username = _payload.username; + //} OnKeyDown = new RelayCommand(ChatBox_KeyDown); } diff --git a/Server/Models/ServerClient.cs b/Server/Models/ServerClient.cs index b10639b..ea791cb 100644 --- a/Server/Models/ServerClient.cs +++ b/Server/Models/ServerClient.cs @@ -1,4 +1,5 @@  +using Newtonsoft.Json.Linq; using SharedClientServer; using System; using System.Collections.Generic; @@ -16,6 +17,7 @@ namespace Server.Models private byte[] totalBuffer = new byte[1024]; private int totalBufferReceived = 0; public User User { get; set; } + private ServerCommunication serverCom = ServerCommunication.INSTANCE; /// @@ -116,7 +118,17 @@ namespace Server.Models string textUsername = combo.Item1; string textMsg = combo.Item2; + Debug.WriteLine("[SERVERCLIENT] User name: {0}\t User message: {1}", textUsername, textMsg); + + dynamic dataPacket = new + { + username = textUsername, + message = textMsg + }; + // todo handle sending to all except this user the username and message to display in chat + //serverCom.SendToAllExcept(); + serverCom.sendToAll(JSONConvert.GetMessageToSend(JSONConvert.MESSAGE, dataPacket)); break; case JSONConvert.LOBBY: diff --git a/SharedClientServer/JSONConvert.cs b/SharedClientServer/JSONConvert.cs index b0d83cb..4914ee3 100644 --- a/SharedClientServer/JSONConvert.cs +++ b/SharedClientServer/JSONConvert.cs @@ -24,6 +24,7 @@ namespace SharedClientServer public static (string,string) GetUsernameAndMessage(byte[] json) { string msg = Encoding.ASCII.GetString(json); + Debug.WriteLine("Sent data: {0}", msg); dynamic payload = JsonConvert.DeserializeObject(msg); return (payload.username, payload.message); @@ -49,7 +50,6 @@ namespace SharedClientServer } - /// /// constructs a message that can be sent to the clients or server /// From a4e45b1a6b24a79e0c3a2c1226857daa676d125f Mon Sep 17 00:00:00 2001 From: Dogukan Date: Wed, 21 Oct 2020 20:43:28 +0200 Subject: [PATCH 3/3] [MISC] tried to send the message to the current lobby, didn't work. --- Client/Client.cs | 3 ++- Client/ClientData.cs | 13 +++++++++++++ Client/ViewModels/ViewModelGame.cs | 20 +++++++++++--------- Server/Models/ServerClient.cs | 10 ++-------- SharedClientServer/JSONConvert.cs | 1 - 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/Client/Client.cs b/Client/Client.cs index c44eca6..f75c1af 100644 --- a/Client/Client.cs +++ b/Client/Client.cs @@ -82,8 +82,9 @@ namespace Client (string, string) combo = JSONConvert.GetUsernameAndMessage(payload); string textUsername = combo.Item1; string textMsg = combo.Item2; - //TODO display username and message in chat window + //TODO display username and message in chat window + Debug.WriteLine("[CLIENT] INCOMING MESSAGE!"); Debug.WriteLine("[CLIENT] User name: {0}\t User message: {1}", textUsername, textMsg); break; diff --git a/Client/ClientData.cs b/Client/ClientData.cs index 9442e8d..8a217a0 100644 --- a/Client/ClientData.cs +++ b/Client/ClientData.cs @@ -30,6 +30,7 @@ namespace Client private User _user; private Client _client; private Lobby _lobby; + private string _message; private ClientData() { @@ -55,5 +56,17 @@ namespace Client set { _lobby = value; } } + public String Message + { + get + { + return _message; + } + set + { + _message = value; + } + } + } } diff --git a/Client/ViewModels/ViewModelGame.cs b/Client/ViewModels/ViewModelGame.cs index 8af8af4..d75c52c 100644 --- a/Client/ViewModels/ViewModelGame.cs +++ b/Client/ViewModels/ViewModelGame.cs @@ -33,15 +33,17 @@ namespace Client.ViewModels public ViewModelGame() { - //if (_payload == null) - //{ - // _message = ""; - //} - //else - //{ - // _message = _payload.message; - // _username = _payload.username; - //} + if (_payload == null) + { + _message = ""; + + } + else + { + //_message = data.Message; + //_username = data.User.Username; + //Messages.Add($"{data.User.Username}: {Message}"); + } OnKeyDown = new RelayCommand(ChatBox_KeyDown); } diff --git a/Server/Models/ServerClient.cs b/Server/Models/ServerClient.cs index ea791cb..e2afa52 100644 --- a/Server/Models/ServerClient.cs +++ b/Server/Models/ServerClient.cs @@ -120,15 +120,9 @@ namespace Server.Models Debug.WriteLine("[SERVERCLIENT] User name: {0}\t User message: {1}", textUsername, textMsg); - dynamic dataPacket = new - { - username = textUsername, - message = textMsg - }; - // todo handle sending to all except this user the username and message to display in chat - //serverCom.SendToAllExcept(); - serverCom.sendToAll(JSONConvert.GetMessageToSend(JSONConvert.MESSAGE, dataPacket)); + serverCom.SendToLobby(User.Lobby,payload); + Debug.WriteLine("Payload has been sent!"); break; case JSONConvert.LOBBY: diff --git a/SharedClientServer/JSONConvert.cs b/SharedClientServer/JSONConvert.cs index 4914ee3..c83ca44 100644 --- a/SharedClientServer/JSONConvert.cs +++ b/SharedClientServer/JSONConvert.cs @@ -24,7 +24,6 @@ namespace SharedClientServer public static (string,string) GetUsernameAndMessage(byte[] json) { string msg = Encoding.ASCII.GetString(json); - Debug.WriteLine("Sent data: {0}", msg); dynamic payload = JsonConvert.DeserializeObject(msg); return (payload.username, payload.message);