diff --git a/PolyChat/Controller.cs b/PolyChat/Controller.cs
index 850c213..6877d93 100644
--- a/PolyChat/Controller.cs
+++ b/PolyChat/Controller.cs
@@ -12,10 +12,11 @@ namespace PolyChat
{
public class Controller
{
- public static IPAddress ip;
+ public static string ip;
private MainPage UIController;
private ClientHandler clientHandler;
+ /*
public Controller(MainPage uiController)
{
UIController = uiController;
@@ -30,9 +31,9 @@ namespace PolyChat
public void sendMessage(String ip, String name, String msg)
{
- clientHandler.getClient(ip).sendMessage(SendCode.Message, name, msg, DateTime.Now);
+ clientHandler.getClient(ip).sendMessage(SendCode.Message, msg, DateTime.Now);
}
-
+ */
///
/// prints out ip. on server side automatticaly finds 10.... ip (which is the correct one)
///
@@ -93,11 +94,16 @@ namespace PolyChat
Console.WriteLine($"Message received from {socket.GetHashCode()}:{message.Data[0]}");
}
- static IPAddress[] GetIPs()
+ static string[] GetIPs()
{
IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
IPAddress[] addr = ipEntry.AddressList;
- return addr;
+ string[] ips = new string[addr.Length];
+ for (int i=0; i
-
-
+
+
diff --git a/PolyChat/MainPage.xaml.cs b/PolyChat/MainPage.xaml.cs
index e90250f..bbc53e8 100644
--- a/PolyChat/MainPage.xaml.cs
+++ b/PolyChat/MainPage.xaml.cs
@@ -17,14 +17,15 @@ namespace PolyChat
///
public sealed partial class MainPage : Page
{
- private Controller Controller;
+ private NetworkingController networkingController;
private ObservableCollection Partners;
private ChatPartner selectedPartner;
private string username;
public MainPage()
{
this.InitializeComponent();
- Controller = new Controller(this);
+ networkingController = new NetworkingController(this);
+
Partners = new ObservableCollection();
//ipAddress.Text = IP.GetCodeFromIP(Controller.GetIP());
}
@@ -41,10 +42,9 @@ namespace PolyChat
{
selectedPartner.AddMessage(new ChatMessage(
inputSend.Text,
- DateTime.Now.ToString(),
false
));
- Controller.sendMessage(selectedPartner.Code, username, inputSend.Text);
+ networkingController.sendMessage(selectedPartner.Code, inputSend.Text);
// clear input
inputSend.Text = "";
}
@@ -79,13 +79,13 @@ namespace PolyChat
}
}
- public void OnIncomingMessage(MSG message)
+ public void OnIncomingMessage(ChatMessage message)
{
- ChatPartner sendingPartner = Partners.First(p => p.Code == message.ip.ToString());
+ ChatPartner sendingPartner = Partners.First(p => p.Code == message.Ip);
sendingPartner.AddMessage(new ChatMessage(
- message.msg,
- message.timestamp.ToString(),
- true
+ message.Msg,
+ true,
+ message.Sender
));
}
diff --git a/PolyChat/Models/ChatMessage.cs b/PolyChat/Models/ChatMessage.cs
index b429318..60cb6d0 100644
--- a/PolyChat/Models/ChatMessage.cs
+++ b/PolyChat/Models/ChatMessage.cs
@@ -1,23 +1,31 @@
-namespace PolyChat.Models
+using System;
+
+namespace PolyChat.Models
{
public class ChatMessage
{
- public string Text;
- public string Date;
- public bool Foreign;
+ public readonly string Sender;
+ public readonly DateTime Timestamp = new DateTime(1970, 01, 01);
+ public readonly string Msg = "empty";
+ public readonly string Ip;
+ public readonly bool Foreign;
+ public readonly string StringTimeStamp;
- public ChatMessage(string text, string date, bool foreign)
+ public ChatMessage(string Msg = "", bool Foreign = true, string Sender= "Unknown", string Ip = "127.0.0.1")
{
- Text = text;
- Date = date;
- Foreign = foreign;
+ this.Sender = Sender;
+ this.Timestamp = DateTime.Now;
+ StringTimeStamp = Timestamp.ToString();
+ this.Msg = Msg;
+ this.Foreign = Foreign;
+ this.Ip = Ip;
}
override
public string ToString()
{
string prefix = Foreign ? "Other" : "Me";
- return $"{prefix}: Text";
+ return $"{prefix}: {Msg}({Sender})";
}
}
}
\ No newline at end of file
diff --git a/PolyChat/Models/Client.cs b/PolyChat/Models/Client.cs
index 0b2967e..748965f 100644
--- a/PolyChat/Models/Client.cs
+++ b/PolyChat/Models/Client.cs
@@ -10,31 +10,27 @@ using SocketIOSharp.Server.Client;
using EngineIOSharp.Common.Enum;
using Json.Net;
using System.Net;
-using SocketIOSharp.Client;
-using SocketIOSharp.Common;
using SocketIOSharp.Common.Packet;
-using System;
-using System.Net;
-using EngineIOSharp.Common.Enum;
using System.Threading;
+using PolyChat.Models.Exceptions;
namespace PolyChat.Models
{
class Client
{
private SocketIOClient connection;
- public Boolean isConnected = false;
- private List msgStack = new List();
- private Boolean active = true;
- private String ip;
+ private Boolean connected = false;
+ private String ipSelf;
public Client(SocketIOClient connection, String ip)
{
- this.ip = ip;
+ this.ipSelf = ip;
this.connection = connection;
InitEventHandlers(this, connection);
}
+ //Sending
+ //===================================================================================
///
/// converts String message into json file and sends it to the server.
///
@@ -44,12 +40,44 @@ namespace PolyChat.Models
/// Sender of Message
/// the accual text the user wants to send
/// current time
- public void sendMessage(SendCode code, String sender, String chatMessage, DateTime timestamp)
+ public void sendMessage(SendCode code, String chatMessage)
{
new Thread(() =>
{
//create msg
- MSG msg = new MSG(sender, Controller.ip, chatMessage, timestamp);
+ ChatMessage msg = new ChatMessage(chatMessage, false, Controller.ip);
+
+ //convert msg
+ String petJson = JsonNet.Serialize(msg);
+
+ //wait if not connected and send msg
+ int i=0;
+ int sleeptimer = 2000;
+ while(!this.connected)
+ {
+ Thread.Sleep(sleeptimer);
+ i++;
+ if(i>=10)
+ {
+ throw new MessageTimedOutException(i*sleeptimer);
+ }
+ }
+ connection.Emit(code.ToString(), petJson);
+ }).Start();
+ }
+ /*
+ ///
+ /// Sends Message with new name
+ ///
+ ///
+ ///
+ ///
+ public void sendNameChange(SendCode code, String nameChange)
+ {
+ new Thread(() =>
+ {
+ //create msg
+ ChatMessage msg = new ChatMessage( Controller.ip);
//convert msg
String petJson = JsonNet.Serialize(msg);
@@ -58,17 +86,12 @@ namespace PolyChat.Models
connection.Emit(code.ToString(), petJson);
}).Start();
}
-
- /*
- private void recieveMessage(String msg)
- {
- // deserialize json string
- MSG pet = JsonNet.Deserialize(msg);
-
- //TODO: send message to GUI
- }
*/
+ //==================================================================================
+ //EventHandeling
+ //===================================================================================
+
///
/// handles all events of client server communiation
///
@@ -78,32 +101,32 @@ namespace PolyChat.Models
{
connection.On(SendCode.Message.ToString(), (Data) =>
{
- MSG pet = JsonNet.Deserialize(BitConverter.ToString(Data[0].ToObject()));
+ ChatMessage pet = JsonNet.Deserialize(BitConverter.ToString(Data[0].ToObject()));
//TODO: send message to GUI
});
+
connection.On(SendCode.Command.ToString(), (Data) =>
{
Console.WriteLine("Command recieved!" + Data[0]);
});
- connection.On(SendCode.test1.ToString(), (Data) =>
- {
- Console.WriteLine("test1 recieved!" + Data[0]);
- });
- connection.On(SendCode.test2.ToString(), (Data) =>
- {
- Console.WriteLine("test2 recieved!" + Data[0]);
- });
connection.On(SocketIOEvent.CONNECTION, () =>
{
- Console.WriteLine("Connected!");
- client.isConnected = true;
+ client.connected = true;
});
}
+ //==================================================================================
+ //Getter and Setter
+ //==================================================================================
public String getIP()
{
- return this.ip;
+ return this.ipSelf;
+ }
+
+ public Boolean isConnected()
+ {
+ return this.connected;
}
}
diff --git a/PolyChat/Models/Exceptions/MessageTimedOutException.cs b/PolyChat/Models/Exceptions/MessageTimedOutException.cs
new file mode 100644
index 0000000..77e7355
--- /dev/null
+++ b/PolyChat/Models/Exceptions/MessageTimedOutException.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PolyChat.Models.Exceptions
+{
+ public class MessageTimedOutException : Exception
+ {
+ public MessageTimedOutException(int seconds) : base(String.Format("After {0} seconds of trying to send the message it has timed out", seconds))
+ {
+
+ }
+ }
+}
diff --git a/PolyChat/Models/MSG.cs b/PolyChat/Models/MSG.cs
index ac75306..637fc3b 100644
--- a/PolyChat/Models/MSG.cs
+++ b/PolyChat/Models/MSG.cs
@@ -18,7 +18,7 @@ namespace PolyChat.Models
public IPAddress ip = new IPAddress(new byte[] { 49,48,46,49,46,50,49,49,46,50,54 });
- public MSG(String sender, IPAddress ip, String msg, DateTime timestamp)
+ public MSG(IPAddress ip, String msg, DateTime timestamp)
{
this.sender = sender;
this.ip = ip;
diff --git a/PolyChat/Models/NetworkingController.cs b/PolyChat/Models/NetworkingController.cs
new file mode 100644
index 0000000..0b09d2f
--- /dev/null
+++ b/PolyChat/Models/NetworkingController.cs
@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using SocketIOSharp.Client;
+using EngineIOSharp.Common.Enum;
+using System.Net;
+using PolyChat.Models.Exceptions;
+
+namespace PolyChat.Models
+{
+ class NetworkingController
+ {
+ public List clients = new List();
+ private String ownName = "";
+ private IPAddress ownIP;
+ MainPage uiController;
+
+ public NetworkingController (MainPage uiController)
+ {
+ this.uiController = uiController;
+ this.ownIP = getIP();
+ }
+
+ //EXTERNAL METHODS
+ //=========================================================================================================================================================================================
+
+ ///
+ /// connects self to server with given ip
+ ///
+ /// server to connect to
+ public void connectNewClient(String ip)
+ {
+ SocketIOClient connection = new SocketIOClient(new SocketIOClientOption(EngineIOScheme.http, ip, 8050));
+ connection.Connect();
+ clients.Add(new Client(connection, ip));
+ }
+
+ ///
+ /// sends Message to given ip
+ ///
+ /// partner to send to
+ /// to send
+ public void sendMessage(String ip, String msg)
+ {
+ this.getClient(ip).sendMessage(SendCode.Message, msg);
+ }
+
+ ///
+ /// returns own ip adress
+ ///
+ ///
+ public IPAddress getIP()
+ {
+ IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
+ IPAddress[] addrList = ipEntry.AddressList;
+
+ for (short i = 0; i < addrList.Length; i++)
+ {
+ if (addrList[i].ToString().Substring(0, 3).Equals("10."))
+ {
+ return addrList[i];
+ }
+ }
+ return null;
+ }
+
+ /*
+ ///
+ /// changes name of self and sends new name to all chats
+ ///
+ ///
+ public void changeName(String newName)
+ {
+ this.ownName = newName;
+ foreach(Client cl in clients)
+ {
+ cl.sendNameChange(SendCode.NameChange, newName);
+ }
+ }
+ */
+
+ //=========================================================================================================================================================================================
+ //INTERNAL METHODS
+ //=========================================================================================================================================================================================
+
+ ///
+ /// returns client that fits to ip adress
+ ///
+ ///
+ ///
+ private Client getClient(String ip)
+ {
+ foreach (Client cl in clients)
+ {
+ if (cl.getIP().Equals(ip))
+ {
+ return cl;
+ }
+ }
+ return null;
+ }
+ }
+}
diff --git a/PolyChat/Models/SendCode.cs b/PolyChat/Models/SendCode.cs
index 0fd4f78..0995534 100644
--- a/PolyChat/Models/SendCode.cs
+++ b/PolyChat/Models/SendCode.cs
@@ -4,7 +4,7 @@
{
Message,
Command,
- test1,
- test2
+ NameChange,
+ Initial
}
}
\ No newline at end of file
diff --git a/PolyChat/Models/Socket.cs b/PolyChat/Models/Socket.cs
index 8dcec3c..5107ad6 100644
--- a/PolyChat/Models/Socket.cs
+++ b/PolyChat/Models/Socket.cs
@@ -14,7 +14,7 @@ namespace PolyChat.Models
{
private Controller p;
private readonly ushort Port;
- private SocketIOServer Server;
+ private SocketIOServer server;
private List Sockets = new List();
///
@@ -25,9 +25,9 @@ namespace PolyChat.Models
{
this.Port = Port;
this.p = p;
- Server = new SocketIOServer(new SocketIOServerOption(Port));
- Server.OnConnection((socket) => OnConnect(socket));
- Server.Start();
+ server = new SocketIOServer(new SocketIOServerOption(Port));
+ server.OnConnection((socket) => OnConnect(socket));
+ server.Start();
Console.WriteLine($"Server started, binding to port {Port}, waiting for connection...");
}
diff --git a/PolyChat/PolyChat.csproj b/PolyChat/PolyChat.csproj
index a820cb1..2e6b0b9 100644
--- a/PolyChat/PolyChat.csproj
+++ b/PolyChat/PolyChat.csproj
@@ -12,7 +12,7 @@
en-US
UAP
10.0.19041.0
- 10.0.19041.0
+ 10.0.18362.0
14
512
{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
@@ -124,10 +124,11 @@
+
+
-