예제 #1
0
        private async void Start_Click(object sender, RoutedEventArgs e)
        {
            if (this.server != null && this.server.IsListening)
            {
                this.server.Stop();
            }

            var part = Address.Text.Split(":");
            var ip   = part[0];
            var port = int.Parse(part[1]);

            WatsonWsServer server = new WatsonWsServer(ip, port, false);

            server.ClientConnected    += ClientConnected;
            server.ClientDisconnected += ClientDisconnected;
            server.MessageReceived    += MessageReceived;
            await server.StartAsync();

            if (server.IsListening)
            {
                this.server   = server;
                Content.Text += $"Server Start\n\n";
            }
            else
            {
                Content.Text += $"Can not start the server\n\n";
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            // test1
            _Server = new WatsonWsServer("localhost", 9000, false);
            _Server.ClientConnected    += (s, a) => { /* Console.WriteLine("Client " + a.IpPort + " connected"); */ };
            _Server.ClientDisconnected += (s, a) => { /* Console.WriteLine("Client " + a.IpPort + " disconnected"); */ };
            _Server.MessageReceived    += (s, a) => { /* Console.WriteLine(Encoding.UTF8.GetString(a.Data)); */ };
            _Server.Start();
            Console.WriteLine("Test 1 with server started: " + ClientTask());

            // test2
            Task.Delay(1000).Wait();
            _Server.Stop();
            Console.WriteLine("Test 2 with server stopped: " + ClientTask());

            // test3
            Task.Delay(1000).Wait();
            _Server.Start();
            Console.WriteLine("Test 3 with server restarted: " + ClientTask());

            // test4
            Task.Delay(1000).Wait();
            _Server.Dispose();
            Console.WriteLine("Test 4 with server disposed: " + ClientTask());

            // test5
            Task.Delay(1000).Wait();
            _Server = new WatsonWsServer("localhost", 9000, false);
            _Server.ClientConnected    += (s, a) => { /* Console.WriteLine("Client " + a.IpPort + " connected"); */ };
            _Server.ClientDisconnected += (s, a) => { /* Console.WriteLine("Client " + a.IpPort + " disconnected"); */ };
            _Server.MessageReceived    += (s, a) => { /* Console.WriteLine(Encoding.UTF8.GetString(a.Data)); */ };
            _Server.Start();
            Console.WriteLine("Test 5 with server started: " + ClientTask());
        }
예제 #3
0
        public BasicControlMessageConsumer(WatsonWsServer socket)
        {
            this.socket                = socket;
            socket.ClientConnected    += ClientConnected;
            socket.ClientDisconnected += ClientDisconnected;

            socket.Start();
        }
        public Worker(IHostApplicationLifetime hostApplicationLifetime, ILogger <Worker> logger, IMessageProcessor messageProcessor)
        {
            _hostApplicationLifetime = hostApplicationLifetime;
            _logger           = logger;
            _messageProcessor = messageProcessor ?? throw new ArgumentNullException(nameof(messageProcessor));
#if !SKIP_WS
            _server = new WatsonWsServer("127.0.0.1", 4321, false);
#endif
        }
        public AsynchronousWebSocketListener(string IP, int Port)
        {
            WatsonWsServer server = new WatsonWsServer(IP, Port, true | false);

            server.ClientConnected    += ClientConnected;
            server.ClientDisconnected += ClientDisconnected;
            server.MessageReceived    += MessageReceived;
            server.Start();
        }
예제 #6
0
        private static void InitializeServer()
        {
            server = new WatsonWsServer(serverConfig.Ip, serverConfig.Port, serverConfig.Ssl);

            server.ClientConnected    += ClientConnected;
            server.ClientDisconnected += ClientDisconnected;
            server.MessageReceived    += MessageReceived;

            log.Add($"Server running at {serverConfig.Ip}:{serverConfig.Port}");
        }
예제 #7
0
 static void InitializeServer()
 {
     _Server = new WatsonWsServer(_ServerIp, _ServerPort, _Ssl);
     _Server.AcceptInvalidCertificates = _AcceptInvalidCertificates;
     _Server.ClientConnected          += ClientConnected;
     _Server.ClientDisconnected       += ClientDisconnected;
     _Server.MessageReceived          += MessageReceived;
     _Server.Logger      = Logger;
     _Server.HttpHandler = HttpHandler;
 }
예제 #8
0
        public WebsocketService()
        {
            Server  = new WatsonWsServer("127.0.0.1", 5003, false);
            Clients = new List <string>();

            Server.ClientConnected    += Server_ClientConnected;
            Server.ClientDisconnected += Server_ClientDisconnected;
            Server.MessageReceived    += Server_MessageReceived;

            Console.WriteLine("starting server");
            Server.Start();
        }
예제 #9
0
        static void InitializeServer()
        {
            server = new WatsonWsServer(
                serverIp,
                serverPort,
                ssl);

            server.ClientConnected    += ClientConnected;
            server.ClientDisconnected += ClientDisconnected;
            server.MessageReceived    += MessageReceived;
            server.Logger              = Logger;
            server.Start();
        }
예제 #10
0
        public void Start()
        {
            Instance = this;
            manager  = new ServerManager();

            server = new WatsonWsServer("", 3005, false);
            server.ClientConnected    += ClientConnected;
            server.ClientDisconnected += ClientDisconnected;
            server.MessageReceived    += MessageReceived;
            server.Start();

            Console.WriteLine("Server started.");
        }
예제 #11
0
        private void Stop_Click(object sender, RoutedEventArgs e)
        {
            if (this.server == null || !this.server.IsListening)
            {
                Content.Text += $"Server Unstart\n\n";
                return;
            }

            this.server.Stop();
            this.server.Dispose();
            this.server = null;

            Content.Text += $"Server Stop\n\n";
        }
예제 #12
0
        public void Start()
        {
            if (IsActive)
            {
                Stop();
            }

            _socket = new WatsonWsServer(IP, Port, false);
            _socket.MessageReceived += Socket_MessageReceived;
            _socket.Start();

            _timer.Interval = KeepAliveInterval.TotalMilliseconds;
            _timer.Start();
        }
 public void Start()
 {
     try
     {
         _server = new WatsonWsServer(ServerUrl.DnsSafeHost, ServerUrl.Port, false);
         _server.MessageReceived += Server_MessageReceived;
         _server.Start();
         _timer.Start();
         IsOpen = true;
     }
     catch (Exception ex)
     {
         Error?.Invoke(this, ex);
     }
 }
예제 #14
0
        static void InitializeServer()
        {
            // original constructor
            _Server = new WatsonWsServer(_ServerIp, _ServerPort, _Ssl);

            // URI-based constructor
            // if (_Ssl) _Server = new WatsonWsServer(new Uri("https://" + _ServerIp + ":" + _ServerPort));
            // else _Server = new WatsonWsServer(new Uri("http://" + _ServerIp + ":" + _ServerPort));

            _Server.ClientConnected    += ClientConnected;
            _Server.ClientDisconnected += ClientDisconnected;
            _Server.MessageReceived    += MessageReceived;
            _Server.Logger              = Logger;
            _Server.HttpHandler         = HttpHandler;
        }
예제 #15
0
 public bool OpenConnection()
 {
     try
     {
         WatsonWsServer server = new WatsonWsServer("127.0.0.1", 3000, false);
         server.ClientConnected    += ClientConnected;
         server.ClientDisconnected += ClientDisconnected;
         server.MessageReceived    += MessageReceived;
         server.Logger              = Logger;
         server.Start();
         return(true);
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         return(false);
     }
 }
예제 #16
0
        public static void Run(Arguments args)
        {
            // Save the configuration for later
            Args = args;

            // Configure the Serilog Logging
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Debug()
                         .WriteTo.Console()
                         .CreateLogger();

            // Print the a message with information about the current system
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                Log.Information($"Starting LambentLight Daemon in Windows");
            }
            else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                Log.Information($"Starting LambentLight Daemon in Linux");
            }
            // If we are on something not supported, return
            else
            {
                Log.Fatal("Unsuported operating system detected!");
                Log.Fatal("LambentLight can only be used on Windows and Linux");
                Environment.Exit(1);
            }

            // And run the websocket server
            WatsonWsServer server = new WatsonWsServer(args.IP, args.Port, args.SSL)
            {
                PermittedIpAddresses = args.Allowed.ToList()
            };

            server.MessageReceived    += Server_MessageReceived;
            server.ClientConnected    += Server_ClientConnected;
            server.ClientDisconnected += Server_ClientDisconnected;
            server.ServerStopped      += Server_ServerStopped;
            Log.Information("Starting LambentLight in Daemon Mode on {0}:{1}", args.IP, args.Port);
            server.Start();
            Thread.Sleep(Timeout.Infinite);
        }
예제 #17
0
        static void InitializeServerMultiple()
        {
            // original constructor
            List <string> hostnames = new List <string>
            {
                "192.168.1.163",
                "127.0.0.1"
            };

            _Server = new WatsonWsServer(hostnames, _ServerPort, _Ssl);

            // URI-based constructor
            // if (_Ssl) _Server = new WatsonWsServer(new Uri("https://" + _ServerIp + ":" + _ServerPort));
            // else _Server = new WatsonWsServer(new Uri("http://" + _ServerIp + ":" + _ServerPort));

            _Server.ClientConnected    += ClientConnected;
            _Server.ClientDisconnected += ClientDisconnected;
            _Server.MessageReceived    += MessageReceived;
            _Server.Logger              = Logger;
            _Server.HttpHandler         = HttpHandler;
        }
예제 #18
0
        static void Main(string[] args)
        {
            using (WatsonWsServer wss = new WatsonWsServer(_Hostname, _Port, false))
            {
                wss.ClientConnected    += (s, e) => Console.WriteLine("Client connected: " + e.IpPort);
                wss.ClientDisconnected += (s, e) => Console.WriteLine("Client disconnected: " + e.IpPort);
                wss.MessageReceived    += (s, e) =>
                {
                    Console.WriteLine("Server message received from " + e.IpPort + ": " + Encoding.UTF8.GetString(e.Data));
                    _ClientIpPort = e.IpPort;
                };

                wss.Start();

                Thread.Sleep(2500);

                using (WatsonWsClient wsc = new WatsonWsClient(_Hostname, _Port, false))
                {
                    wsc.ServerConnected    += (s, e) => Console.WriteLine("Client connected to server");
                    wsc.ServerDisconnected += (s, e) => Console.WriteLine("Client disconnected from server");
                    wsc.MessageReceived    += (s, e) => Console.WriteLine("Client received message from server: " + Encoding.UTF8.GetString(e.Data));
                    wsc.Start();

                    Thread.Sleep(2500);

                    Console.WriteLine("Sending message from client to server...");
                    wsc.SendAsync("Hello from client").Wait();

                    Thread.Sleep(2500);

                    Console.WriteLine("Sending message from server to client...");
                    wss.SendAsync(_ClientIpPort, "Hello from server").Wait();

                    Console.WriteLine("Press ENTER to exit");
                    Console.ReadLine();
                }
            }
        }
예제 #19
0
 public void Stop()
 {
     _timer.Stop();
     _socket?.Dispose();
     _socket = null;
 }
예제 #20
0
        public WebSocket(string address, int port)
        {
            Socket = new WatsonWsServer(address, port, false, true, null, OnClientConnect, OnClientDisconnect, OnMessageReceived, false);

            Console.WriteLine("Listening on IP/TCP connections at port " + port + "..." + Environment.NewLine);
        }
예제 #21
0
 public Client(string ipPort, WatsonWsServer server)
 {
     _ipPort = ipPort;
     _server = server;
 }
예제 #22
0
        static void Main(string[] args)
        {
            msgData   = Encoding.UTF8.GetBytes(RandomString(msgLength));
            sendDelay = numClients * 20;

            using (server = new WatsonWsServer(hostname, port, false))
            {
                #region Start-Server

                serverStats = new Statistics();

                server.ClientConnected += (s, e) =>
                {
                    Console.WriteLine("Client connected: " + e.IpPort);
                    lock (clientsLock)
                    {
                        clients.Add(e.IpPort);
                    }
                };

                server.ClientDisconnected += (s, e) =>
                {
                    Console.WriteLine("*** Client disconnected: " + e.IpPort);
                    lock (clientsLock)
                    {
                        if (clients.Contains(e.IpPort))
                        {
                            clients.Remove(e.IpPort);
                        }
                    }
                };

                server.MessageReceived += (s, e) =>
                {
                    serverStats.AddRecv(e.Data.Length);
                };

                // server.Logger = Logger;
                server.Start();

                #endregion

                #region Start-and-Wait-for-Clients

                for (int i = 0; i < numClients; i++)
                {
                    Console.WriteLine("Starting client " + (i + 1) + "...");
                    Task.Run(() => ClientTask());
                    Task.Delay(250).Wait();
                }

                while (true)
                {
                    Task.Delay(1000).Wait();
                    int connected = 0;
                    lock (clientsLock)
                    {
                        connected = clients.Count;
                    }
                    if (connected == numClients)
                    {
                        break;
                    }
                    Console.WriteLine(connected + " of " + numClients + " connected, waiting");
                }

                Console.WriteLine("All clients connected!");
                serverReady = true;

                #endregion

                #region Send-Messages-to-Clients

                for (int i = 0; i < messagesPerClient; i++)
                {
                    for (int j = 0; j < numClients; j++)
                    {
                        server.SendAsync(clients[j], msgData).Wait();
                        serverStats.AddSent(msgData.Length);
                    }
                }

                #endregion

                #region Wait-for-Clients

                while (true)
                {
                    Task.Delay(5000).Wait();
                    int remaining = 0;
                    lock (clientsLock)
                    {
                        remaining = clients.Count;
                        if (remaining < 1)
                        {
                            break;
                        }
                        Console.WriteLine(DateTime.Now.ToUniversalTime().ToString("HH:mm:ss.ffffff") + " waiting for " + remaining + " clients: ");
                        foreach (string curr in clients)
                        {
                            Console.WriteLine("| " + curr);
                        }
                    }
                }

                #endregion

                #region Statistics

                Console.WriteLine("");
                Console.WriteLine("");
                Console.WriteLine("Server statistics:");
                Console.WriteLine("  " + serverStats.ToString());
                Console.WriteLine("");
                Console.WriteLine("Client statistics");
                foreach (Statistics stats in clientStats)
                {
                    Console.WriteLine("  " + stats.ToString());
                }
                Console.WriteLine("");

                #endregion
            }
        }
예제 #23
0
        static void Main(string[] args)
        {
            string header = "[Server] ";

            using (server = new WatsonWsServer(hostname, port, false))
            {
                #region Start-Server

                server.ClientConnected += (s, e) =>
                {
                    clientIpPort = e.IpPort;
                    Console.WriteLine(header + "client connected: " + e.IpPort);
                };

                server.ClientDisconnected += (s, e) =>
                {
                    clientIpPort = null;
                    Console.WriteLine(header + "client disconnected: " + e.IpPort);
                };

                server.MessageReceived += async(s, e) =>
                {
                    // echo it back
                    serverStats.AddRecv(e.Data.Count);
                    await server.SendAsync(e.IpPort, e.Data);

                    serverStats.AddSent(e.Data.Count);
                };

                server.Logger = Logger;
                server.Start();
                Console.WriteLine(header + "started");

                #endregion

                #region Start-Client-and-Send-Messages

                Task.Run(() => ClientTask());

                Task.Delay(1000).Wait();

                while (String.IsNullOrEmpty(clientIpPort))
                {
                    Task.Delay(1000).Wait();
                    Console.WriteLine(header + "waiting for client connection");
                }
                ;

                Console.WriteLine(header + "detected client " + clientIpPort + ", sending messages");

                for (int i = 0; i < serverSendMessageCount; i++)
                {
                    byte[] msgData = Encoding.UTF8.GetBytes(RandomString(serverMessageLength));
                    server.SendAsync(clientIpPort, msgData).Wait();
                    serverStats.AddSent(msgData.Length);
                }

                Console.WriteLine(header + "messages sent");

                #endregion

                #region Wait-for-and-Echo-Client-Messages

                while (!String.IsNullOrEmpty(clientIpPort))
                {
                    Console.WriteLine(header + "waiting for client to finish");
                    Task.Delay(1000).Wait();
                }

                #endregion

                #region Statistics

                Console.WriteLine("");
                Console.WriteLine("");
                Console.WriteLine("Server statistics:");
                Console.WriteLine("  " + serverStats.ToString());
                Console.WriteLine("");
                Console.WriteLine("Client statistics");
                Console.WriteLine("  " + clientStats.ToString());
                Console.WriteLine("");

                #endregion

                Console.WriteLine("Press ENTER to exit");
                Console.ReadLine();
            }
        }
예제 #24
0
        static void Main(string[] args)
        {
            Console.Write("Server IP        : ");
            serverIp = Console.ReadLine();

            Console.Write("Server Port      : ");
            serverPort = Convert.ToInt32(Console.ReadLine());

            Console.Write("SSL (true/false) : ");
            ssl = Convert.ToBoolean(Console.ReadLine());

            WatsonWsServer server = new WatsonWsServer(serverIp, serverPort, ssl, true, null, ClientConnected, ClientDisconnected, MessageReceived, true);

            bool runForever = true;

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

                List <string> clients;
                string        ipPort;

                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("  send    send message to client");
                    Console.WriteLine("  kill    disconnect a client");
                    break;

                case "q":
                    runForever = false;
                    break;

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

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

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

                default:
                    break;
                }
            }
        }