Example #1
0
        /// <summary>
        /// Processes the clients commands
        /// </summary>
        private async void ProcessClient(Client client)
        {
            await Task.Run(() =>
            {
                try
                {
                    while (true)
                    {
                        var response = new byte[2048];
                        var received = client.WorkingSocket.Receive(response);
                        if (received == 0)
                        {
                            ClientHandler.Remove(client);
                            Console.WriteLine("Client closed connection!");
                            return;
                        }

                        var respBytesList = new List <byte>(response);
                        respBytesList.RemoveRange(received, 2048 - received); // truncate zero end
                        CommandManager.Execute(client.Id, Encoding.UTF8.GetString(respBytesList.ToArray()));
                    }
                }
                catch (Exception e)
                {
                    ClientHandler.Remove(client);
                    Console.WriteLine($"{client.Id} | {client.Name} closed the connection.");
                }
            });
        }
Example #2
0
        /// <summary>
        /// Listens for new clients
        /// </summary>
        public void Listen()
        {
            try
            {
                _serverSocket.ReceiveTimeout = -1;
                _serverSocket.Bind(new IPEndPoint(IPAddress.Any, 2222));
                _serverSocket.Listen(-1);
                Console.WriteLine("Start listening to port 2222...");

                while (true)
                {
                    var clientSocket = _serverSocket.Accept();
                    var client       = new Client
                    {
                        WorkingSocket = clientSocket
                    };

                    ClientHandler.Add(client);
                    new System.Threading.Thread(() =>
                    {
                        try
                        {
                            ProcessClient(client);
                        }
                        catch (Exception ex)
                        {
                            ClientHandler.Remove(client);
                            Console.ForegroundColor = ConsoleColor.DarkRed;
                            Console.WriteLine("Client connection processing error: " + ex.Message);
                            Console.ForegroundColor = ConsoleColor.Gray;
                        }
                    }).Start();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.ReadLine();
            }
        }