/// <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; } }
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; } }
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)); }
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; }