diff --git a/Client/Client.cs b/Client/Client.cs index 71e8c43..5346d92 100644 --- a/Client/Client.cs +++ b/Client/Client.cs @@ -72,14 +72,15 @@ namespace Client } stream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(OnReadComplete), null); - } private void handleData(byte[] message) { byte id = message[4]; + byte[] payload = new byte[message.Length - 5]; Array.Copy(message, 5, payload, 0, message.Length - 5); + switch (id) { case JSONConvert.LOGIN: @@ -90,8 +91,10 @@ 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; case JSONConvert.LOBBY: @@ -118,9 +121,11 @@ namespace Client } //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/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 672cc5f..65fd353 100644 --- a/Client/ViewModels/ViewModelGame.cs +++ b/Client/ViewModels/ViewModelGame.cs @@ -1,4 +1,6 @@ + using Client.Views; +using GalaSoft.MvvmLight.Command; using SharedClientServer; using System.Collections.ObjectModel; using System.ComponentModel; @@ -18,6 +20,26 @@ namespace Client.ViewModels private Point currentPoint = new Point(); private Color color; + 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 void Canvas_MouseDown(MouseButtonEventArgs e, GameWindow window) { if (e.ButtonState == MouseButtonState.Pressed) @@ -59,9 +81,46 @@ namespace Client.ViewModels colorSelected.B = window.ClrPcker_Background.SelectedColor.Value.B; color = colorSelected; } + + public ViewModelGame() + { + if (_payload == null) + { + _message = ""; + } + else + { + //_message = data.Message; + //_username = data.User.Username; + //Messages.Add($"{data.User.Username}: {Message}"); + } + 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 7481671..9d90635 100644 --- a/Client/Views/GameWindow.xaml.cs +++ b/Client/Views/GameWindow.xaml.cs @@ -52,36 +52,11 @@ 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) { viewModel.Color_Picker(e, this); } - - 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"); - } - - private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) - { - - } } } diff --git a/Client/Views/MainWindow.xaml.cs b/Client/Views/MainWindow.xaml.cs index 058bbc8..fbcf18a 100644 --- a/Client/Views/MainWindow.xaml.cs +++ b/Client/Views/MainWindow.xaml.cs @@ -32,8 +32,6 @@ namespace Client private void Button_Click(object sender, RoutedEventArgs e) { - - } } } diff --git a/Server/Models/ServerClient.cs b/Server/Models/ServerClient.cs index 0f5b00f..90eab73 100644 --- a/Server/Models/ServerClient.cs +++ b/Server/Models/ServerClient.cs @@ -1,5 +1,7 @@  + using Client; +using Newtonsoft.Json.Linq; using SharedClientServer; using System; using System.Collections.Generic; @@ -18,6 +20,7 @@ namespace Server.Models private byte[] totalBuffer = new byte[1024]; private int totalBufferReceived = 0; public User User { get; set; } + private ServerCommunication serverCom = ServerCommunication.INSTANCE; /// @@ -119,7 +122,11 @@ namespace Server.Models string textUsername = combo.Item1; string textMsg = combo.Item2; + Debug.WriteLine("[SERVERCLIENT] User name: {0}\t User message: {1}", textUsername, textMsg); + // todo handle sending to all except this user the username and message to display in chat + serverCom.SendToLobby(ServerCommunication.INSTANCE.GetLobbyForUser(User),payload); + Debug.WriteLine("Payload has been sent!"); break; case JSONConvert.LOBBY: 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 35ec378..e504418 100644 --- a/SharedClientServer/User.cs +++ b/SharedClientServer/User.cs @@ -10,6 +10,7 @@ namespace SharedClientServer private string _username; private int _score; private bool _host; + private string _message; [JsonConstructor] public User(string username, int score, bool host)