Example #1
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (_WtcpServer != null)
         {
             _WtcpServer.Dispose();
         }
     }
 }
Example #2
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (Wtcp != null)
         {
             Wtcp.Dispose();
         }
     }
 }
Example #3
0
        public void Shutdown()
        {
            var clients = _watsonTcpServer.ListClients();

            foreach (var client in clients)
            {
                _watsonTcpServer.DisconnectClient(client);
            }
            _watsonTcpServer.Dispose();
            Environment.Exit(0);
        }
Example #4
0
        protected virtual void Dispose(bool disposing)
        {
            if (_Disposed)
            {
                return;
            }

            if (disposing)
            {
                if (_TcpServer != null)
                {
                    _TcpServer.Dispose();
                }
            }

            _Disposed = true;
        }
Example #5
0
        private static void Main(string[] args)
        {
            serverIp   = InputString("Server IP:", "127.0.0.1", false);
            serverPort = InputInteger("Server port:", 9000, true, false);
            useSsl     = InputBoolean("Use SSL:", false);

            if (!useSsl)
            {
                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);
                mutualAuthentication = InputBoolean("Mutually authenticate:", false);

                server = new WatsonTcpServer(serverIp, serverPort, certFile, certPass);
                server.AcceptInvalidCertificates = acceptInvalidCerts;
                server.MutuallyAuthenticate      = mutualAuthentication;
            }

            server.ClientConnected    = ClientConnected;
            server.ClientDisconnected = ClientDisconnected;
            server.MessageReceived    = MessageReceived;
            server.Debug = debug;
            server.Start();

            bool runForever = true;

            while (runForever)
            {
                Console.Write("Command [? for help]: ");
                string userInput = Console.ReadLine();

                List <string> clients;
                string        ipPort;
                bool          success = false;

                if (String.IsNullOrEmpty(userInput))
                {
                    continue;
                }

                switch (userInput)
                {
                case "?":
                    Console.WriteLine("Available commands:");
                    Console.WriteLine("  ?          help (this menu)");
                    Console.WriteLine("  q          quit");
                    Console.WriteLine("  cls        clear screen");
                    Console.WriteLine("  list       list clients");
                    Console.WriteLine("  dispose    dispose of the connection");
                    Console.WriteLine("  send       send message to client");
                    Console.WriteLine("  sendasync  send message to a client asynchronously");
                    Console.WriteLine("  remove     disconnect client");
                    Console.WriteLine("  psk        set preshared key");
                    Console.WriteLine("  debug      enable/disable debug (currently " + server.Debug + ")");
                    break;

                case "q":
                    runForever = false;
                    break;

                case "cls":
                    Console.Clear();
                    break;

                case "list":
                    clients = server.ListClients();
                    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":
                    Console.Write("IP:Port: ");
                    ipPort = Console.ReadLine();
                    if (String.IsNullOrEmpty(ipPort))
                    {
                        break;
                    }
                    Console.Write("Data: ");
                    userInput = Console.ReadLine();
                    if (String.IsNullOrEmpty(userInput))
                    {
                        break;
                    }
                    success = server.Send(ipPort, Encoding.UTF8.GetBytes(userInput));
                    Console.WriteLine(success);
                    break;

                case "sendasync":
                    Console.Write("IP:Port: ");
                    ipPort = Console.ReadLine();
                    if (String.IsNullOrEmpty(ipPort))
                    {
                        break;
                    }
                    Console.Write("Data: ");
                    userInput = Console.ReadLine();
                    if (String.IsNullOrEmpty(userInput))
                    {
                        break;
                    }
                    success = server.SendAsync(ipPort, Encoding.UTF8.GetBytes(userInput)).Result;
                    Console.WriteLine(success);
                    break;

                case "remove":
                    Console.Write("IP:Port: ");
                    ipPort = Console.ReadLine();
                    server.DisconnectClient(ipPort);
                    break;

                case "psk":
                    server.PresharedKey = InputString("Preshared key:", "1234567812345678", false);
                    break;

                case "debug":
                    server.Debug = !server.Debug;
                    Console.WriteLine("Debug set to: " + server.Debug);
                    break;

                default:
                    break;
                }
            }
        }
Example #6
0
        static void Main(string[] args)
        {
            server = new WatsonTcpServer("127.0.0.1", 9000);
            server.Events.ClientConnected    += ServerClientConnected;
            server.Events.ClientDisconnected += ServerClientDisconnected;
            server.Events.MessageReceived    += ServerMessageReceived;
            // server.StreamReceived = ServerStreamReceived;
            // server.Debug = true;
            server.Start();

            client = new WatsonTcpClient("127.0.0.1", 9000);
            client.Events.ServerConnected    += ServerConnected;
            client.Events.ServerDisconnected += ServerDisconnected;
            client.Events.MessageReceived    += MessageReceived;
            // client.Events.StreamReceived = StreamReceived;
            // client.Debug = true;
            client.Start();

            int msgSize = (1024 * 128);

            Console.Write("Message size (default 128KB): ");
            string userInput = Console.ReadLine();

            if (!String.IsNullOrEmpty(userInput))
            {
                msgSize = Convert.ToInt32(userInput);
            }

            int msgCount = 4;

            Console.Write("Message count (default 4): ");
            userInput = Console.ReadLine();
            if (!String.IsNullOrEmpty(userInput))
            {
                msgCount = Convert.ToInt32(userInput);
            }

            Console.WriteLine("");
            Console.WriteLine("---");
            Console.WriteLine("Sending messages from client to server...");

            for (int i = 0; i < msgCount; i++)
            {
                string randomString = RandomString(msgSize);
                string md5          = Md5(randomString);
                Console.WriteLine("Client sending " + msgSize + " bytes: MD5 " + md5);
                client.Send(Encoding.UTF8.GetBytes(randomString));
            }

            Console.WriteLine("");
            Console.WriteLine("---");

            string ipPort = server.ListClients().ToList()[0];

            Console.WriteLine("Sending messages from server to client " + ipPort + "...");

            for (int i = 0; i < msgCount; i++)
            {
                string randomString = RandomString(msgSize);
                string md5          = Md5(randomString);
                Console.WriteLine("Server sending " + msgSize + " bytes: MD5 " + md5);
                server.Send(ipPort, Encoding.UTF8.GetBytes(randomString));
            }

            Console.WriteLine("");
            Console.WriteLine("---");
            Console.WriteLine("Press ENTER to exit");
            Console.ReadLine();
            server.Dispose();
            client.Dispose();
        }
Example #7
0
 public void close() => server.Dispose();
Example #8
0
        private static void Main(string[] args)
        {
            serverIp   = InputString("Server IP:", "127.0.0.1", false);
            serverPort = InputInteger("Server port:", 9000, true, false);
            useSsl     = InputBoolean("Use SSL:", false);

            try
            {
                if (!useSsl)
                {
                    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);
                    mutualAuthentication = InputBoolean("Mutually authenticate:", false);

                    server = new WatsonTcpServer(serverIp, serverPort, certFile, certPass);
                    server.AcceptInvalidCertificates = acceptInvalidCerts;
                    server.MutuallyAuthenticate      = mutualAuthentication;
                }

                server.ClientConnected    += ClientConnected;
                server.ClientDisconnected += ClientDisconnected;
                server.MessageReceived    += MessageReceived;
                server.SyncRequestReceived = SyncRequestReceived;
                // server.PresharedKey = "0000000000000000";
                // server.IdleClientTimeoutSeconds = 10;
                server.Logger        = Logger;
                server.DebugMessages = debugMessages;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return;
            }

            // server.Start();
            Task serverStart = server.StartAsync();

            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 "?":
                    Console.WriteLine("Available commands:");
                    Console.WriteLine("  ?                   help (this menu)");
                    Console.WriteLine("  q                   quit");
                    Console.WriteLine("  cls                 clear screen");
                    Console.WriteLine("  list                list clients");
                    Console.WriteLine("  dispose             dispose of the connection");
                    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("  psk                 set preshared key");
                    Console.WriteLine("  stats               display server statistics");
                    Console.WriteLine("  stats reset         reset statistics other than start time and uptime");
                    Console.WriteLine("  comp                set the compression type, currently: " + server.Compression.ToString());
                    Console.WriteLine("  debug               enable/disable debug (currently " + server.DebugMessages + ")");
                    break;

                case "q":
                    runForever = false;
                    break;

                case "cls":
                    Console.Clear();
                    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 "send md":
                    ipPort    = InputString("IP:port:", lastIpPort, false);
                    userInput = InputString("Data:", null, false);
                    metadata  = InputDictionary();
                    if (!server.Send(ipPort, metadata, userInput))
                    {
                        Console.WriteLine("Failed");
                    }
                    Console.WriteLine(success);
                    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, metadata, "Hello!"))
                    {
                        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, metadata, Encoding.UTF8.GetBytes(userInput)).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 "psk":
                    server.PresharedKey = InputString("Preshared key:", "1234567812345678", false);
                    break;

                case "stats":
                    Console.WriteLine(server.Stats.ToString());
                    break;

                case "stats reset":
                    server.Stats.Reset();
                    break;

                case "comp":
                    server.Compression = (CompressionType)(Enum.Parse(typeof(CompressionType), InputString("Compression [None|Default|Gzip]:", "None", false)));
                    break;

                case "debug":
                    server.DebugMessages = !server.DebugMessages;
                    Console.WriteLine("Debug set to: " + server.DebugMessages);
                    break;

                default:
                    break;
                }
            }
        }
Example #9
0
        private static void ClientToServer()
        {
            _Random         = new Random((int)DateTime.Now.Ticks);
            _DataLargeBytes = InitByteArray(_DataLargeSize, 0x00);
            _DataLargeMd5   = BytesToHex(Md5(_DataLargeBytes));
            _DataSmallBytes = InitByteArray(_DataSmallSize, 0x00);
            _DataSmallMd5   = BytesToHex(Md5(_DataSmallBytes));
            Console.WriteLine("Large Data MD5: " + _DataLargeMd5);
            Console.WriteLine("Small Data MD5: " + _DataSmallMd5);
            Console.WriteLine("Starting in 3 seconds...");

            _Server = new WatsonTcpServer(null, _ServerPort);
            _Server.Events.ClientConnected    += ServerClientConnected;
            _Server.Events.ClientDisconnected += ServerClientDisconnected;
            if (!_UseStreams)
            {
                _Server.Events.MessageReceived += ServerMsgReceived;
            }
            else
            {
                _Server.Events.StreamReceived += ServerStreamReceived;
            }
            _Server.Callbacks.SyncRequestReceived = ServerSyncRequestReceived;
            _Server.Settings.MaxProxiedStreamSize = _MaxProxiedStreamSize;
            _Server.Settings.Logger        = Console.WriteLine;
            _Server.Settings.DebugMessages = _Debug;
            _Server.Start();

            Thread.Sleep(2000);

            _Client = new WatsonTcpClient("localhost", _ServerPort);
            _Client.Events.ServerConnected    += ClientServerConnected;
            _Client.Events.ServerDisconnected += ClientServerDisconnected;
            if (!_UseStreams)
            {
                _Client.Events.MessageReceived += ClientMsgReceived;
            }
            else
            {
                _Client.Events.StreamReceived += ClientStreamReceived;
            }
            _Client.Callbacks.SyncRequestReceived = ClientSyncRequestReceived;
            _Client.Settings.MaxProxiedStreamSize = _MaxProxiedStreamSize;
            _Client.Settings.Logger        = Console.WriteLine;
            _Client.Settings.DebugMessages = _Debug;
            _Client.Start();

            Thread.Sleep(2000);

            Console.WriteLine("Press ENTER to exit");

            for (int i = 0; i < _ClientThreads; i++)
            {
                Console.WriteLine("Starting client thread " + i);
                Task.Run(() => ClientTask());
            }

            Console.WriteLine("Press ENTER after completion to view statistics");
            Console.ReadLine();
            _Client.Stop();
            _Server.Stop();


            _Server.Dispose();
            _Client.Dispose();

            Console.WriteLine("Success: " + _Success);
            Console.WriteLine("Failure: " + _Failure);
        }
Example #10
0
        /// <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);
        }
Example #11
0
        private static void Main(string[] args)
        {
            serverIp   = InputString("Server IP:", "127.0.0.1", false);
            serverPort = InputInteger("Server port:", 9000, true, false);
            useSsl     = InputBoolean("Use SSL:", false);

            try
            {
                if (!useSsl)
                {
                    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);
                    mutualAuthentication = InputBoolean("Mutually authenticate:", false);

                    server = new WatsonTcpServer(serverIp, serverPort, certFile, certPass);
                    server.AcceptInvalidCertificates = acceptInvalidCerts;
                    server.MutuallyAuthenticate      = mutualAuthentication;
                }

                server.ClientConnected    += ClientConnected;
                server.ClientDisconnected += ClientDisconnected;
                server.MessageReceived    += MessageReceived;
                // server.IdleClientTimeoutSeconds = 10;
                server.Logger        = Logger;
                server.DebugMessages = debug;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return;
            }

            // server.Start();
            Task serverStart = server.StartAsync();

            bool runForever = true;

            while (runForever)
            {
                Console.Write("Command [? for help]: ");
                string userInput = Console.ReadLine();

                List <string> clients;
                string        ipPort;
                Dictionary <object, object> metadata;
                bool success = false;

                if (String.IsNullOrEmpty(userInput))
                {
                    continue;
                }

                switch (userInput)
                {
                case "?":
                    Console.WriteLine("Available commands:");
                    Console.WriteLine("  ?              help (this menu)");
                    Console.WriteLine("  q              quit");
                    Console.WriteLine("  cls            clear screen");
                    Console.WriteLine("  list           list clients");
                    Console.WriteLine("  dispose        dispose of the connection");
                    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("  remove         disconnect client");
                    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("  conn           show connection count");
                    Console.WriteLine("  max            set max connections (currently " + server.MaxConnections + ")");
                    Console.WriteLine("  debug          enable/disable debug (currently " + server.DebugMessages + ")");
                    break;

                case "q":
                    runForever = false;
                    break;

                case "cls":
                    Console.Clear();
                    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":
                    Console.Write("IP:Port: ");
                    ipPort = Console.ReadLine();
                    if (String.IsNullOrEmpty(ipPort))
                    {
                        break;
                    }
                    Console.Write("Data: ");
                    userInput = Console.ReadLine();
                    if (String.IsNullOrEmpty(userInput))
                    {
                        break;
                    }
                    success = server.Send(ipPort, Encoding.UTF8.GetBytes(userInput));
                    Console.WriteLine(success);
                    break;

                case "send md":
                    Console.Write("IP:Port: ");
                    ipPort = Console.ReadLine();
                    if (String.IsNullOrEmpty(ipPort))
                    {
                        break;
                    }
                    metadata = InputDictionary();
                    Console.Write("Data: ");
                    userInput = Console.ReadLine();
                    if (String.IsNullOrEmpty(userInput))
                    {
                        break;
                    }
                    success = server.Send(ipPort, metadata, Encoding.UTF8.GetBytes(userInput));
                    Console.WriteLine(success);
                    break;

                case "sendasync":
                    Console.Write("IP:Port: ");
                    ipPort = Console.ReadLine();
                    if (String.IsNullOrEmpty(ipPort))
                    {
                        break;
                    }
                    Console.Write("Data: ");
                    userInput = Console.ReadLine();
                    if (String.IsNullOrEmpty(userInput))
                    {
                        break;
                    }
                    success = server.SendAsync(ipPort, Encoding.UTF8.GetBytes(userInput)).Result;
                    Console.WriteLine(success);
                    break;

                case "sendasync md":
                    Console.Write("IP:Port: ");
                    ipPort = Console.ReadLine();
                    if (String.IsNullOrEmpty(ipPort))
                    {
                        break;
                    }
                    metadata = InputDictionary();
                    Console.Write("Data: ");
                    userInput = Console.ReadLine();
                    if (String.IsNullOrEmpty(userInput))
                    {
                        break;
                    }
                    success = server.SendAsync(ipPort, metadata, Encoding.UTF8.GetBytes(userInput)).Result;
                    Console.WriteLine(success);
                    break;

                case "remove":
                    Console.Write("IP:Port: ");
                    ipPort = Console.ReadLine();
                    server.DisconnectClient(ipPort);
                    break;

                case "psk":
                    server.PresharedKey = InputString("Preshared key:", "1234567812345678", false);
                    break;

                case "stats":
                    Console.WriteLine(server.Stats.ToString());
                    break;

                case "stats reset":
                    server.Stats.Reset();
                    break;

                case "conn":
                    Console.WriteLine("Connections: " + server.Connections);
                    break;

                case "max":
                    server.MaxConnections = InputInteger("Max connections:", 4096, true, false);
                    break;

                case "debug":
                    server.DebugMessages = !server.DebugMessages;
                    Console.WriteLine("Debug set to: " + server.DebugMessages);
                    break;

                default:
                    break;
                }
            }
        }
Example #12
0
        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;
                }
            }
        }