private static void Main(string[] args) { _ServerIp = InputString("Server IP:", "localhost", false); _ServerPort = InputInteger("Server port:", 9000, true, false); _Ssl = InputBoolean("Use SSL:", false); try { if (!_Ssl) { _Server = new WatsonTcpServer(_ServerIp, _ServerPort); } else { _CertFile = InputString("Certificate file:", "test.pfx", false); _CertPass = InputString("Certificate password:"******"password", false); _AcceptInvalidCerts = InputBoolean("Accept invalid certs:", true); _MutualAuth = InputBoolean("Mutually authenticate:", false); _Server = new WatsonTcpServer(_ServerIp, _ServerPort, _CertFile, _CertPass); _Server.Settings.AcceptInvalidCertificates = _AcceptInvalidCerts; _Server.Settings.MutuallyAuthenticate = _MutualAuth; } _Server.Events.ClientConnected += ClientConnected; _Server.Events.ClientDisconnected += ClientDisconnected; _Server.Events.MessageReceived += MessageReceived; _Server.Events.ServerStarted += ServerStarted; _Server.Events.ServerStopped += ServerStopped; _Server.Callbacks.SyncRequestReceived = SyncRequestReceived; // _Server.Settings.IdleClientTimeoutSeconds = 10; // _Server.Settings.PresharedKey = "0000000000000000"; _Server.Settings.Logger = Logger; _Server.Settings.DebugMessages = _DebugMessages; _Server.Keepalive.EnableTcpKeepAlives = true; _Server.Keepalive.TcpKeepAliveInterval = 1; _Server.Keepalive.TcpKeepAliveTime = 1; _Server.Keepalive.TcpKeepAliveRetryCount = 3; } catch (Exception e) { Console.WriteLine(e.ToString()); return; } _Server.Start(); bool runForever = true; List <string> clients; string ipPort; Dictionary <object, object> metadata; bool success = false; while (runForever) { string userInput = InputString("Command [? for help]:", null, false); switch (userInput) { case "?": bool listening = (_Server != null ? _Server.IsListening : false); Console.WriteLine("Available commands:"); Console.WriteLine(" ? help (this menu)"); Console.WriteLine(" q quit"); Console.WriteLine(" cls clear screen"); Console.WriteLine(" start start listening for connections (listening: " + listening.ToString() + ")"); Console.WriteLine(" stop stop listening for connections (listening: " + listening.ToString() + ")"); Console.WriteLine(" list list clients"); Console.WriteLine(" dispose dispose of the server"); Console.WriteLine(" send send message to client"); Console.WriteLine(" send md send message with metadata to client"); Console.WriteLine(" sendasync send message to a client asynchronously"); Console.WriteLine(" sendasync md send message with metadata to a client asynchronously"); Console.WriteLine(" sendandwait send message and wait for a response"); Console.WriteLine(" sendempty send empty message with metadata"); Console.WriteLine(" sendandwait empty send empty message with metadata and wait for a response"); Console.WriteLine(" remove disconnect client"); Console.WriteLine(" remove all disconnect all clients"); Console.WriteLine(" psk set preshared key"); Console.WriteLine(" stats display server statistics"); Console.WriteLine(" stats reset reset statistics other than start time and uptime"); Console.WriteLine(" debug enable/disable debug"); break; case "q": runForever = false; break; case "cls": Console.Clear(); break; case "start": _Server.Start(); break; case "stop": _Server.Stop(); break; case "list": clients = _Server.ListClients().ToList(); if (clients != null && clients.Count > 0) { Console.WriteLine("Clients"); foreach (string curr in clients) { Console.WriteLine(" " + curr); } } else { Console.WriteLine("None"); } break; case "dispose": _Server.Dispose(); break; case "send": ipPort = InputString("IP:port:", _LastIpPort, false); userInput = InputString("Data:", null, false); if (!_Server.Send(ipPort, userInput)) { Console.WriteLine("Failed"); } break; case "send10": ipPort = InputString("IP:port:", _LastIpPort, false); userInput = InputString("Data:", null, false); for (int i = 0; i < 10; i++) { Console.WriteLine("Sending " + i); if (!_Server.Send(ipPort, userInput + "[" + i.ToString() + "]")) { Console.WriteLine("Failed"); } } break; case "send md": ipPort = InputString("IP:port:", _LastIpPort, false); userInput = InputString("Data:", null, false); metadata = InputDictionary(); if (!_Server.Send(ipPort, userInput, metadata)) { Console.WriteLine("Failed"); } break; case "send md large": ipPort = InputString("IP:port:", _LastIpPort, false); metadata = new Dictionary <object, object>(); for (int i = 0; i < 100000; i++) { metadata.Add(i, i); } if (!_Server.Send(ipPort, "Hello!", metadata)) { Console.WriteLine("Failed"); } break; case "sendasync": ipPort = InputString("IP:port:", _LastIpPort, false); userInput = InputString("Data:", null, false); success = _Server.SendAsync(ipPort, Encoding.UTF8.GetBytes(userInput)).Result; if (!success) { Console.WriteLine("Failed"); } break; case "sendasync md": ipPort = InputString("IP:port:", _LastIpPort, false); userInput = InputString("Data:", null, false); metadata = InputDictionary(); success = _Server.SendAsync(ipPort, Encoding.UTF8.GetBytes(userInput), metadata).Result; if (!success) { Console.WriteLine("Failed"); } break; case "sendandwait": SendAndWait(); break; case "sendempty": ipPort = InputString("IP:port:", _LastIpPort, false); metadata = InputDictionary(); if (!_Server.Send(ipPort, "", metadata)) { Console.WriteLine("Failed"); } break; case "sendandwait empty": SendAndWaitEmpty(); break; case "remove": ipPort = InputString("IP:port:", _LastIpPort, false); _Server.DisconnectClient(ipPort); break; case "remove all": _Server.DisconnectClients(); break; case "psk": _Server.Settings.PresharedKey = InputString("Preshared key:", "1234567812345678", false); break; case "stats": Console.WriteLine(_Server.Statistics.ToString()); break; case "stats reset": _Server.Statistics.Reset(); break; case "debug": _Server.Settings.DebugMessages = !_Server.Settings.DebugMessages; Console.WriteLine("Debug set to: " + _Server.Settings.DebugMessages); break; default: break; } } }
/// <summary> /// Event handler for SyncRequest being received by Host. /// </summary> /// <param name="arg">The SyncRequest that recieved.</param> /// <returns></returns> //======Joined requests====== //!qq = Exit //!getFile *relative path to file* = upload file to Joined //!catchFile *relative path to file* = get file from Joined //!exists *relative path to file* = check if file exists on servers side and then answer for Joined //!getFileDataList = get all relative pathes and hashes to it and send it to Joined //!sessiondone = updates servers Filer and Hasher //!rm *relative path to file* = remove file on Host side //!getFileInfo *relative path to file* = get file info from Host //======Host Respones====== //!dd = ready for next operation //!Yes = answer for file existance if it does exist //!No = answer for file existance if it does not exist private SyncResponse SyncSolver(SyncRequest arg) { servH.Events.StreamReceived -= StreamReceived; string cmd = GetStringFromBytes(arg.Data); SyncResponse sr = new SyncResponse(arg, GetBytesFromString("NotRecognized")); if (cmd.Contains("!qq")) { servH.DisconnectClients(); servH.Stop(); servH.Dispose(); } else if (cmd.Contains("!getFile ")) { cmd = cmd.Replace("!getFile ", ""); UploadFile(arg.IpPort, cmd); sr = new SyncResponse(arg, GetBytesFromString("!dd")); } else if (cmd.Contains("!catchFile ")) { while (gettingFile) { } DownloadFileTo = Filed.RootPath + cmd.Replace("!catchFile ", ""); sr = new SyncResponse(arg, GetBytesFromString("!dd")); servH.Events.StreamReceived += StreamReceived; } else if (cmd.Contains("!exists ")) { cmd = cmd.Replace("!exists ", ""); if (Filed.CheckFileExistanceFromRelative(cmd)) { sr = new SyncResponse(arg, GetBytesFromString("!Yes")); } else { sr = new SyncResponse(arg, GetBytesFromString("!No")); } } else if (cmd.Contains("!getFileDataList")) { cmd = cmd.Replace("!getFileDataList", ""); sr = new SyncResponse(arg, GetBytesFromString(GetFileList())); } else if (cmd.Contains("!sessiondone")) { cmd = cmd.Replace("!sessiondone", ""); Filed.RecomputeHashesBasedOnModifiedStatus(); FilerHashesIO.WriteHashesToFile(ts.hashDictionaryName, Filed); sr = new SyncResponse(arg, GetBytesFromString("!dd")); UIHandler.WriteLog("Session done!", Color.Green); } else if (cmd.Contains("!rm ")) { cmd = cmd.Replace("!rm ", ""); if (Filed.GetLocalFromRelative(cmd) != "?FileNotFound?") { File.Delete(Filed.GetLocalFromRelative(cmd)); Filed.ChangeFileModifiedStatusByRelativePath(cmd, FileModifiedStatus.Deleted); } sr = new SyncResponse(arg, GetBytesFromString("!dd")); } else if (cmd.Contains("!getFileInfo ")) { cmd = cmd.Replace("!getFileInfo ", ""); FileInfo fi = Filed.GetLocalFileInfoFromRelative(cmd); sr = new SyncResponse(arg, GetBytesFromString($"{fi.Length}\n{fi.LastAccessTime.ToString()}")); } return(sr); }
private static void Main(string[] args) { _ServerIp = InputString("Server IP:", "127.0.0.1", false); _ServerPort = InputInteger("Server port:", 9000, true, false); _Ssl = InputBoolean("Use SSL:", false); if (!_Ssl) { _Server = new WatsonTcpServer(_ServerIp, _ServerPort); } else { _CertFile = InputString("Certificate file:", "test.pfx", false); _CertPass = InputString("Certificate password:"******"password", false); _AcceptInvalidCerts = InputBoolean("Accept Invalid Certs:", true); _MutualAuth = InputBoolean("Mutually authenticate:", true); _Server = new WatsonTcpServer(_ServerIp, _ServerPort, _CertFile, _CertPass); _Server.Settings.AcceptInvalidCertificates = _AcceptInvalidCerts; _Server.Settings.MutuallyAuthenticate = _MutualAuth; } _Server.Events.ClientConnected += ClientConnected; _Server.Events.ClientDisconnected += ClientDisconnected; _Server.Events.StreamReceived += StreamReceived; _Server.Callbacks.SyncRequestReceived = SyncRequestReceived; _Server.Settings.Logger = Logger; // server.Debug = true; _Server.Start(); bool runForever = true; while (runForever) { Console.Write("Command [? for help]: "); string userInput = Console.ReadLine(); byte[] data = null; MemoryStream ms = null; Dictionary <object, object> metadata; bool success = false; List <string> clients; string ipPort; if (String.IsNullOrEmpty(userInput)) { continue; } switch (userInput) { case "?": bool listening = (_Server != null ? _Server.IsListening : false); Console.WriteLine("Available commands:"); Console.WriteLine(" ? help (this menu)"); Console.WriteLine(" q quit"); Console.WriteLine(" cls clear screen"); Console.WriteLine(" start start listening for connections (listening: " + listening.ToString() + ")"); Console.WriteLine(" stop stop listening for connections (listening: " + listening.ToString() + ")"); Console.WriteLine(" list list clients"); Console.WriteLine(" send send message to client"); Console.WriteLine(" send md send message with metadata to client"); Console.WriteLine(" sendasync send message to a client asynchronously"); Console.WriteLine(" sendasync md send message with metadata to a client asynchronously"); Console.WriteLine(" sendandwait send message and wait for a response"); Console.WriteLine(" remove disconnect client"); Console.WriteLine(" remove all disconnect all clients"); Console.WriteLine(" psk set preshared key"); Console.WriteLine(" debug enable/disable debug"); break; case "q": runForever = false; break; case "cls": Console.Clear(); break; case "start": _Server.Start(); break; case "stop": _Server.Stop(); break; case "list": clients = _Server.ListClients().ToList(); if (clients != null && clients.Count > 0) { Console.WriteLine("Clients"); foreach (string curr in clients) { Console.WriteLine(" " + curr); } } else { Console.WriteLine("None"); } break; case "send": ipPort = InputString("IP:port:", _LastIpPort, false); Console.Write("Data: "); userInput = Console.ReadLine(); if (String.IsNullOrEmpty(userInput)) { break; } data = Encoding.UTF8.GetBytes(userInput); ms = new MemoryStream(data); success = _Server.Send(ipPort, data.Length, ms); Console.WriteLine(success); break; case "send md": ipPort = InputString("IP:port:", _LastIpPort, false); metadata = InputDictionary(); Console.Write("Data: "); userInput = Console.ReadLine(); if (String.IsNullOrEmpty(userInput)) { break; } data = Encoding.UTF8.GetBytes(userInput); ms = new MemoryStream(data); success = _Server.Send(ipPort, data.Length, ms, metadata); Console.WriteLine(success); break; case "sendasync": ipPort = InputString("IP:port:", _LastIpPort, false); Console.Write("Data: "); userInput = Console.ReadLine(); if (String.IsNullOrEmpty(userInput)) { break; } data = Encoding.UTF8.GetBytes(userInput); ms = new MemoryStream(data); ms.Seek(0, SeekOrigin.Begin); success = _Server.SendAsync(ipPort, data.Length, ms).Result; Console.WriteLine(success); break; case "sendasync md": ipPort = InputString("IP:port:", _LastIpPort, false); metadata = InputDictionary(); Console.Write("Data: "); userInput = Console.ReadLine(); if (String.IsNullOrEmpty(userInput)) { break; } data = Encoding.UTF8.GetBytes(userInput); ms = new MemoryStream(data); success = _Server.SendAsync(ipPort, data.Length, ms, metadata).Result; Console.WriteLine(success); break; case "sendandwait": SendAndWait(); break; case "remove": ipPort = InputString("IP:port:", _LastIpPort, false); _Server.DisconnectClient(ipPort); break; case "remove all": _Server.DisconnectClients(); break; case "psk": _Server.Settings.PresharedKey = InputString("Preshared key:", "1234567812345678", false); break; case "debug": _Server.Settings.DebugMessages = !_Server.Settings.DebugMessages; Console.WriteLine("Debug set to: " + _Server.Settings.DebugMessages); break; default: break; } } }