private void HandleClientCommunication(Object _socket) { // Socket Socket socket = (Socket)_socket; // Buffer byte[] buffer; // Client Message ClientMessage clientMessage = new ClientMessage(); clientMessage.SocketInfo = SocketInfo.getSocketInfo(socket); // Buffer buffer = new byte[this.MaxMessageSize]; // initializes a buffer; the MaxMessageSize is a globla Varibale in the TCPServer-Class // while the isn't STOPPED while (this.Status != ServerStatus.STOPPED) { // if the server is RUNNING if (this.Status == ServerStatus.RUNNING) { // Wait until a message recieved socket.Receive(buffer); // save the recieved message clientMessage.Message = this.MessageEncoding.GetString(buffer); // save the Message in in the clientMessage-Object /* Call the Event MessageRecieved */ //this.MessageRecieved(this, clientMessage); } } }
public TCPServer_StreamBasedClient_EventArgs_ClienConnectionAbort(TcpClient _tcpClient) { this.tcpClient = _tcpClient; this.socketInfo = SocketInfo.getSocketInfo(_tcpClient); }
///<summary> /// Handles clientcommuniction /// <param name="_client"> _client which communication should be handled</param> ///</summary> private void HandleClientCommunication(Object _client) { /* TCPClient and Stream */ TcpClient tcpClient = (TcpClient)_client; clientStream = tcpClient.GetStream(); /* SocketInfo */ SocketInfo socketInfo = SocketInfo.getSocketInfo(tcpClient); /* Client Message */ ClientMessage clientMessage = new ClientMessage(); clientMessage.SocketInfo = SocketInfo.getSocketInfo(tcpClient); /* buffer and received_message */ Byte[] message_byte = new byte[this.MaxMessageSize]; Int32 bytesRead; while (this.Status != ServerStatus.STOPPED) { if (this.Status == ServerStatus.RUNNING) { bytesRead = new Int32(); try { // blocks until a client sends a message bytesRead = clientStream.Read(message_byte, 0, this.MaxMessageSize); } catch { // a socket error has occured // throw new Exception("Server: " + "a socket error has occured; Client: " + tcpClient.Client.LocalEndPoint.ToString() + " has interrupted the connection"); TCPServer_StreamBasedClient_EventArgs_ClienConnectionAbort clientConnectionAborted_Event = new TCPServer_StreamBasedClient_EventArgs_ClienConnectionAbort(tcpClient); this.ClientConnectionAborted(this, clientConnectionAborted_Event); System.Console.WriteLine("Server: " + "a socket error has occured; Client: " + "adresse" + " has interrupted the connection"); break; } if (bytesRead == 0) { // the client has disconnected from the server // throw new Exception("Server: " + "a client " + tcpClient.Client.RemoteEndPoint.ToString() + " has disconnected from the server"); TCPServer_StreamBasedClient_EventArgs_ClientDisconnect clientDisconnect_Event = new TCPServer_StreamBasedClient_EventArgs_ClientDisconnect(tcpClient); this.ClientDisconnect(this, clientDisconnect_Event); System.Console.WriteLine("Server: " + "a client " + "adresse" + " has disconnected from the server"); break; } /* recieved Message from Client */ clientMessage.Message = this.MessageEncoding.GetString(message_byte, 0, bytesRead); /* Call the Event MessageRecieved */ TCPServer_EventArgs_MessageRecieved tcpServer_EventArgs_MessageRecieved = new TCPServer_EventArgs_MessageRecieved(clientMessage); this.MessageRecieved(this, tcpServer_EventArgs_MessageRecieved); } } // Close open connections if (clientStream != null) { clientStream.Flush(); clientStream.Close(); } // if the tcpClient isn't null if (tcpClient != null) { // remove tcpClient from list clients this.clients.RemoveAt(this.clients.IndexOf(tcpClient)); } // if the tcpClient is still connected if (tcpClient.Connected) { // close the tcpClient tcpClient.Close(); } // remove this thread from list clientsThread this.clientThreads.RemoveAt(this.clientThreads.IndexOf(Thread.CurrentThread)); }