diff --git a/Server/Models/Information.cs b/Server/Models/Information.cs
index 8f41ba9..1764312 100644
--- a/Server/Models/Information.cs
+++ b/Server/Models/Information.cs
@@ -4,6 +4,7 @@ namespace Server.Models
{
public class Information : ObservableObject
{
+
public bool CanStartServer { get; set; }
public bool ServerOnline { get; set; }
@@ -15,5 +16,7 @@ namespace Server.Models
return "Offline";
}
}
+
+ public int ClientsConnected{ get { return ServerCommunication.INSTANCE.ClientsConnected; } }
}
}
\ No newline at end of file
diff --git a/Server/Models/ServerClient.cs b/Server/Models/ServerClient.cs
index 4db4128..94a563f 100644
--- a/Server/Models/ServerClient.cs
+++ b/Server/Models/ServerClient.cs
@@ -84,7 +84,30 @@ namespace Server.Models
/// the incoming message
private void HandleIncomingMessage(byte[] message)
{
- Debug.WriteLine($"Got message from client : {message}");
+ Debug.WriteLine($"Got message from {Username} : {message}");
+ byte id = message[0];
+ byte[] payload = new byte[message.Length - 1];
+ Array.Copy(message,1,payload,0,message.Length-1);
+ switch(id)
+ {
+ case 0x01:
+ // canvas data
+ break;
+ case 0x02:
+ // json message data
+ (string, string) combo = JSONConvert.GetUsernameAndMessage(payload);
+ string textUsername = combo.Item1;
+ string textMsg = combo.Item2;
+ // todo handle sending to all except this user the username and message to display in chat
+ break;
+
+ case 0x03:
+ // object data
+ break;
+ default:
+ Debug.WriteLine("Received weird identifier: " + id);
+ break;
+ }
//TODO implement ways to handle the message
}
diff --git a/Server/Models/ServerCommunication.cs b/Server/Models/ServerCommunication.cs
index 0ead864..4dcf07a 100644
--- a/Server/Models/ServerCommunication.cs
+++ b/Server/Models/ServerCommunication.cs
@@ -14,6 +14,7 @@ namespace Server.Models
private TcpListener listener;
private List serverClients;
public bool Started = false;
+ public int ClientsConnected { get { return serverClients.Count; } }
///
/// use a padlock object to make sure the singleton is thread-safe
@@ -85,5 +86,13 @@ namespace Server.Models
sc.sendMessage(message);
}
}
+
+ public void sendToAllExcept(string username, byte[] message)
+ {
+ foreach (ServerClient sc in serverClients)
+ {
+ if (sc.Username != username) sc.sendMessage(message);
+ }
+ }
}
}
diff --git a/Server/Server.csproj b/Server/Server.csproj
index afc85b6..c6ad1ce 100644
--- a/Server/Server.csproj
+++ b/Server/Server.csproj
@@ -11,6 +11,7 @@
+
diff --git a/Server/ViewModels/MainViewModel.cs b/Server/ViewModels/MainViewModel.cs
index 7652c38..0ff5359 100644
--- a/Server/ViewModels/MainViewModel.cs
+++ b/Server/ViewModels/MainViewModel.cs
@@ -9,6 +9,7 @@ using System.Net.Sockets;
using System.Text;
using System.Windows.Input;
using System.Windows.Media;
+using System.Windows.Media.Imaging;
namespace Server.ViewModels
{
@@ -21,24 +22,21 @@ namespace Server.ViewModels
public MainViewModel(MainWindow mainWindow)
{
+ serverCommunication = ServerCommunication.INSTANCE;
this.mainWindow = mainWindow;
Debug.WriteLine("init mainviewmodel");
InformationModel = new Information();
InformationModel.CanStartServer = true;
InformationModel.ServerOnline = false;
+ //BitmapImage onlineImg = new BitmapImage(new Uri(@"/img/online.png",UriKind.Relative));
+ //BitmapImage offlineImg = new BitmapImage(new Uri(@"/img/offline.png", UriKind.Relative));
this.ServerStartCommand = new RelayCommand(() =>
{
Debug.WriteLine("connect button clicked");
- if (serverCommunication == null)
- {
- Debug.WriteLine("making new server communication");
- serverCommunication = ServerCommunication.INSTANCE;
- }
+
if (!serverCommunication.Started)
{
-
- Debug.WriteLine("can start server " + InformationModel.CanStartServer);
serverCommunication.Start();
InformationModel.ServerOnline = true;
InformationModel.CanStartServer = false;
diff --git a/Server/Views/MainWindow.xaml b/Server/Views/MainWindow.xaml
index 4cb49fb..5ff94af 100644
--- a/Server/Views/MainWindow.xaml
+++ b/Server/Views/MainWindow.xaml
@@ -8,8 +8,11 @@
Title="MainWindow" Height="450" Width="800">
-
+
-
+
+
+
+
diff --git a/Server/img/offline.png b/Server/img/offline.png
new file mode 100644
index 0000000..be764b2
Binary files /dev/null and b/Server/img/offline.png differ
diff --git a/Server/img/online.png b/Server/img/online.png
new file mode 100644
index 0000000..63b8395
Binary files /dev/null and b/Server/img/online.png differ
diff --git a/SharedClientServer/JSONConvert.cs b/SharedClientServer/JSONConvert.cs
new file mode 100644
index 0000000..004567a
--- /dev/null
+++ b/SharedClientServer/JSONConvert.cs
@@ -0,0 +1,17 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace SharedClientServer
+{
+ class JSONConvert
+ {
+ public static (string,string) GetUsernameAndMessage(byte[] json)
+ {
+ string msg = Encoding.ASCII.GetString(json);
+ dynamic payload = JsonConvert.DeserializeObject(msg);
+ return (payload.username, payload.message);
+ }
+ }
+}
diff --git a/SharedClientServer/SharedClientServer.projitems b/SharedClientServer/SharedClientServer.projitems
index e7cdd0b..97e39cb 100644
--- a/SharedClientServer/SharedClientServer.projitems
+++ b/SharedClientServer/SharedClientServer.projitems
@@ -10,6 +10,7 @@
+
\ No newline at end of file