private void ReceiveBufferCallback(IAsyncResult result) { try { //Gets the length of the data packet from connection. int readBytes = ClientNetworkStream.EndRead(result); //If we are receiving nothing then the connection is closed. if (readBytes <= 0) { //Properly close the connection from the server CloseConnection(); return; } //resizing the byte array with the length of the received data. byte[] newBytesRead = new byte[readBytes]; //copying the packet information with the received length to a new array 'newBytesRead'. Buffer.BlockCopy(_clientReceiveBuffer, Constants.NETWORK_STREAM_OFFSET, newBytesRead, Constants.NETWORK_STREAM_OFFSET, readBytes); //checking which 'packet' we got. ServerHandleData.HandleDataFromClient(ConnectionId, newBytesRead); //Start listening to connections stream, to allow getting other data over the network. ClientNetworkStream.BeginRead(_clientReceiveBuffer, Constants.NETWORK_STREAM_OFFSET, Socket.ReceiveBufferSize, ReceiveBufferCallback, null); } catch (Exception e) { //Properly close connection to the server CloseConnection(); Text.WriteLine($"Error occured in ReceiveBufferCallback with message {e.Message}", TextType.ERROR); } }
public static void InitServer(ChatMessageSingletonService chatMessageSingletonService, IMapper mapper, IServiceProvider serviceProvider) { ServerHandleData serverHandleData = new ServerHandleData(chatMessageSingletonService, mapper, serviceProvider); ServerTcp serverTcp = new ServerTcp(); Text.WriteLine("Loading server ...", TextType.DEBUG); int start = GetTickCount(); InitClients(); serverHandleData.InitPacketsFromClient(); serverTcp.InitServer(); int end = GetTickCount(); Text.WriteLine("Server loaded in {0} ms", TextType.DEBUG, end - start); }