From 381c142eaa3f9e0048c641cd17f99a4c47ba33c3 Mon Sep 17 00:00:00 2001 From: Dogukan Date: Tue, 20 Oct 2020 23:54:29 +0200 Subject: [PATCH] [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) {