Exemplo n.º 1
0
 /// <summary>
 /// Initialises a new instance of Server, using the specified console window and port number.
 /// </summary>
 /// <param name="console">A ServerWindow representing the currently open server console Window.</param>
 /// <param name="port">The port number to start the server on.</param>
 public Server(ServerWindow console, int port)
 {
     _console = console;
     Port = port;
     _clients = new Dictionary<string, TcpClient>();
     _logger.IsEnabled = true;
 }
        private void HandleMessage(string fullMessage, int code, TcpClient client, ServerWindow console)
        {
            string response = null;
            if (code == 302)
            {
                response = Protocol.GetClientResponse(fullMessage);
            }

            switch (code)
            {
                case 300:
                    client.Send(Protocol.GetResponseFromCode(404));
                    console.Log("Client sent 300 Response, but no question was asked. 404 No Question sent.");
                    break;
                case 301:
                    Server.RemoveClient(_username);
                    Server.SendMessage(string.Format("{0} left the chat.", _username), "Server");
                    console.Log("Client sent 301 Disconnecting. Client removed from list, closing resources.");
                    client.Close();
                    Thread.CurrentThread.Abort();
                    break;
                case 302:
                    new Thread(new ParameterizedThreadStart((tcpClient) =>
                    {
                        string respondToClient = this.Parse302Message(response);
                        TcpClient castedClient = (TcpClient)tcpClient;
                        Thread.Sleep(60);
                        castedClient.Send(respondToClient);
                    })).Start(client);
                    break;
            }
        }
Exemplo n.º 3
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            StopAllThreads = false;

            LogDevice = new Logger();

            this.ParseCommandLineArgs();

            if (OperatingMode == OperationMode.Server)
            {
                ServerWindow window = new ServerWindow();
                window.Show();
                window.Closed += (sender, ea) =>
                {
                    Environment.Exit(0);
                };
            }
            else if (OperatingMode == OperationMode.Client)
            {
                ClientWindow window = new ClientWindow();
                window.Show();
                window.Closed += (sender, ea) =>
                {
                    Environment.Exit(0);
                };
            }
        }
        private void HandleMessage(string fullMessage, int code, TcpClient client, ServerWindow console)
        {
            string response = null;
            if (code == 302)
            {
                response = Protocol.GetClientResponse(fullMessage);
            }

            switch (code)
            {
                case 300:
                    client.Send(Protocol.GetResponseFromCode(404));
                    console.Log("Client sent 300 Response, but no question was asked. 404 No Question sent.");
                    break;
                case 301:
                    Server.RemoveClient(_username);
                    console.Log("Client sent 301 Disconnecting. Client removed from list, closing resources.");
                    client.Close();
                    Thread.CurrentThread.Abort();
                    break;
                case 302:
                    Server.SendMessage(string.Join("\n", response), _username);
                    new Thread(new ParameterizedThreadStart((tcpClient) =>
                    {
                        // Delay stops two messages being received at the same time and running together
                        Thread.Sleep(60);
                        TcpClient castedClient = (TcpClient)tcpClient;
                        castedClient.Send(Protocol.GetResponseFromCode(201));
                    })).Start(client);
                    break;
            }
        }
Exemplo n.º 5
0
 public ServerReadState(TcpClient client, byte[] buffer, ServerWindow window)
     : base(client, buffer)
 {
     Window = window;
 }
 public ServerCommunicationState(TcpClient client, ServerWindow window)
 {
     Client = client;
     Window = window;
 }
 /// <summary>
 /// Initialises a new instance of the ServerCommunicationThread class.
 /// </summary>
 /// <param name="client">The TcpClient whose communications this thread will handle.</param>
 /// <param name="username">The username of the TcpClient.</param>
 /// <param name="console">The ServerWindow object containing the output console.</param>
 public ServerCommunicationThread(TcpClient client, string username, ServerWindow console, Server server)
 {
     _username = username;
     _console = console;
     new Thread(new ParameterizedThreadStart(ThreadMethod)).Start(new ServerCommunicationState(client, console, server));
 }
Exemplo n.º 8
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            StopAllThreads = false;

            LogDevice = new Logger();

            this.ParseCommandLineArgs();
            BannedUsers = this.LoadData("banned_users.dta");
            PrivilegedUsers = this.LoadData("privileged_users.dta");

            if (OperatingMode == OperationMode.Server)
            {
                string[] args = Environment.GetCommandLineArgs();
                ServerWindow window = new ServerWindow(args.Contains("-c") || args.Contains("--crash-recovery"));
                ActiveWindow = window;
                window.Show();
                window.Closed += (sender, ea) =>
                {
                    Environment.Exit(0);
                };
            }
            else if (OperatingMode == OperationMode.Client)
            {
                ClientWindow window = new ClientWindow();
                ActiveWindow = window;
                window.Show();
                window.Closed += (sender, ea) =>
                {
                    Environment.Exit(0);
                };
            }
        }
 public ServerCommunicationState(TcpClient client, ServerWindow window, Server server)
 {
     Client = client;
     Window = window;
     Server = server;
 }