diff --git a/Client/Client.cs b/Client/Client.cs
index bc7b2b5..25f07c1 100644
--- a/Client/Client.cs
+++ b/Client/Client.cs
@@ -138,6 +138,10 @@ namespace Client
// canvas data
break;
+ case JSONConvert.RANDOMWORD:
+ //Flag byte for receiving the random word.
+ ViewModels.ViewModelGame.HandleRandomWord(JSONConvert.GetRandomWord(payload));
+ break;
default:
Debug.WriteLine("[CLIENT] Received weird identifier: " + id);
break;
diff --git a/Client/ViewModels/ViewModelGame.cs b/Client/ViewModels/ViewModelGame.cs
index 661e83f..cbc6a49 100644
--- a/Client/ViewModels/ViewModelGame.cs
+++ b/Client/ViewModels/ViewModelGame.cs
@@ -1,11 +1,12 @@
-using Client.Views;
+using Client.Views;
using GalaSoft.MvvmLight.Command;
using SharedClientServer;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows;
+using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
@@ -25,6 +26,12 @@ namespace Client.ViewModels
private dynamic _payload;
+ public static string Word
+ {
+ get;
+ set;
+ }
+
public string _username;
public string _message;
@@ -82,21 +89,10 @@ 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);
}
@@ -121,6 +117,10 @@ namespace Client.ViewModels
data.Client.SendMessage(JSONConvert.GetMessageToSend(JSONConvert.MESSAGE, _payload));
}
+ /*
+ * MISC make this a callback
+ * Handles the incoming chat message from another client.
+ */
public static void HandleIncomingMsg(string username, string message)
{
Application.Current.Dispatcher.Invoke(delegate
@@ -128,13 +128,21 @@ namespace Client.ViewModels
Messages.Add($"{username}: {message}");
});
}
- public void LeaveGame(object sender, System.ComponentModel.CancelEventArgs e)
+ public void LeaveGame(object sender, CancelEventArgs e)
{
Debug.WriteLine("Leaving...");
data.Client.SendMessage(JSONConvert.ConstructLobbyLeaveMessage(data.Lobby.ID));
}
-
+ /*
+ * MISC make this a callback
+ * Handles the random word that has been received from the server.
+ */
+ public static void HandleRandomWord(string randomWord)
+ {
+ Debug.WriteLine("[CLIENT] Reached the handle random word method!");
+ Word = "NegerPik";
+ }
}
}
-
+
diff --git a/Client/Views/GameWindow.xaml b/Client/Views/GameWindow.xaml
index 1599e1f..dff9a66 100644
--- a/Client/Views/GameWindow.xaml
+++ b/Client/Views/GameWindow.xaml
@@ -36,6 +36,8 @@
+
+
diff --git a/Server/Models/ServerClient.cs b/Server/Models/ServerClient.cs
index 2c063ea..5300fb4 100644
--- a/Server/Models/ServerClient.cs
+++ b/Server/Models/ServerClient.cs
@@ -153,6 +153,10 @@ namespace Server.Models
// canvas data
// todo send canvas data to all other serverclients in lobby
break;
+
+ case JSONConvert.RANDOMWORD:
+ //Flag byte for receiving the random word.
+ break;
default:
Debug.WriteLine("[SERVER] Received weird identifier: " + id);
break;
@@ -178,8 +182,13 @@ namespace Server.Models
int id = JSONConvert.GetLobbyID(payload);
ServerCommunication.INSTANCE.JoinLobby(this.User,id);
sendMessage(JSONConvert.ConstructLobbyJoinSuccessMessage());
+
+ serverCom.SendToLobby(serverCom.GetLobbyForUser(User), JSONConvert.GetMessageToSend(RANDOMWORD, new
+ {
+ word = JSONConvert.SendRandomWord("WordsForGame.json")
+ }));
+
ServerCommunication.INSTANCE.sendToAll(JSONConvert.ConstructLobbyListMessage(ServerCommunication.INSTANCE.lobbies.ToArray()));
- Debug.WriteLine("Random chosen word: {0}", JSONConvert.GetRandomWord(@"..\resources\WordsForGame.json"));
break;
case LobbyIdentifier.LEAVE:
id = JSONConvert.GetLobbyID(payload);
diff --git a/Server/Models/ServerCommunication.cs b/Server/Models/ServerCommunication.cs
index 1d22c27..4440096 100644
--- a/Server/Models/ServerCommunication.cs
+++ b/Server/Models/ServerCommunication.cs
@@ -142,6 +142,7 @@ namespace Server.Models
{
foreach (ServerClient sc in serverClientsInlobbies[l])
{
+ Debug.WriteLine("[SERVERCLIENT] Sending message");
sc.sendMessage(message);
}
break;
diff --git a/Server/Server.csproj b/Server/Server.csproj
index d65a717..0e46462 100644
--- a/Server/Server.csproj
+++ b/Server/Server.csproj
@@ -12,7 +12,7 @@
- PreserveNewest
+ Always
diff --git a/SharedClientServer/JSONConvert.cs b/SharedClientServer/JSONConvert.cs
index 9f13def..c0f84af 100644
--- a/SharedClientServer/JSONConvert.cs
+++ b/SharedClientServer/JSONConvert.cs
@@ -1,4 +1,5 @@
using Client;
+using Microsoft.VisualBasic.CompilerServices;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
@@ -16,6 +17,7 @@ namespace SharedClientServer
public const byte MESSAGE = 0x02;
public const byte LOBBY = 0x03;
public const byte CANVAS = 0x04;
+ public const byte RANDOMWORD = 0x05;
public enum LobbyIdentifier
{
@@ -161,21 +163,37 @@ namespace SharedClientServer
return res;
}
- public static string GetRandomWord(string filename)
+ /*
+ * This method sends a random word from the json file, this happens when the client joins a lobby.
+ */
+ public static string SendRandomWord(string filename)
{
- string[] words = new string[25];
- using(StreamReader reader = new StreamReader(@"../../json1.jsonWordsForGame.json"))
+ dynamic words;
+ Random random = new Random();
+ string workingDir = Path.GetFullPath(@"..\Server");
+ string projDir = Directory.GetParent(workingDir).Parent.Parent.FullName;
+ string filePath = projDir += $@"\resources\{filename}";
+
+ using(StreamReader reader = new StreamReader(filePath))
{
string json = reader.ReadToEnd();
- words = JsonConvert.DeserializeObject>(json).ToArray();
+ words = JsonConvert.DeserializeObject(json);
}
- Random random = new Random();
int index = random.Next(0, 24);
- return words[index];
+ Debug.WriteLine($"[SERVERCLIENT] Sending random words {words}");
+ return words.words[index];
}
+ /*
+ * Client gets the payload and retrieves the word from the payload
+ */
+ public static string GetRandomWord(byte[] json)
+ {
+ dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
+ return payload.word;
+ }
}
}