/// <summary> /// Called when [data received]. /// </summary> /// <param name="asyn">The asyn.</param> private void OnDataReceived(IAsyncResult asyn) { // Receive stateobject of the client that sent data LogClient dataSender = (LogClient)asyn.AsyncState; try { // Complete aysnc receive method and read data length int bytesRead = dataSender.ClientSocket.EndReceive(asyn); if (bytesRead > 0) { // More data could be sent so append data received so far dataSender.StrBuilder.Append(Encoding.UTF8.GetString(dataSender.buffer, 0, bytesRead)); if (dataSender.StrBuilder.Length != 0 && MessageReceived != null ) { // TODO: is it possible that multiple messages are in the sb? // Consider whether it's necessary to replace with newline. dataSender.StrBuilder.Replace("\0", null); // Removes them. // Dispatch Event SocketMessageReceivedArgs args = new SocketMessageReceivedArgs(); args.Message = dataSender.StrBuilder.ToString(); args.ClientId = dataSender.ClientId; MessageReceived(this, args); dataSender.StrBuilder.Clear(); } try { dataSender.ClientSocket.BeginReceive(dataSender.buffer, 0, LogClient.BufferSize, 0, new AsyncCallback(this.OnDataReceived), dataSender); } catch (SocketException) { } } else { //closeSocket(dataSender.UniqueAddress); } } catch (SocketException) { // TODO: should we closeSocketSilent()? Or? } catch (ObjectDisposedException) { // TODO: should we closeSocketSilent()? Or? } }
/// <summary> /// Server_s the message received. /// </summary> /// <param name="socketServer">The socket server.</param> /// <param name="e">The e.</param> void Server_MessageReceived(ILoggerServer socketServer, SocketMessageReceivedArgs e) { ConnectedClients[e.ClientAddress](e.ClientAddress, e.Message); }
/// <summary> /// Called when [data received]. /// </summary> /// <param name="asyn">The asyn.</param> private void OnDataReceived(IAsyncResult asyn) { // Receive stateobject of the client that sent data LogClient dataSender = (LogClient)asyn.AsyncState; try { // Complete aysnc receive method and read data length int bytesRead = dataSender.ClientSocket.EndReceive(asyn); if (bytesRead > 0) { // More data could be sent so append data received so far dataSender.StrBuilder.Append(Encoding.UTF8.GetString(dataSender.buffer, 0, bytesRead)); if (dataSender.StrBuilder.Length != 0 && MessageReceived != null ) { // TODO: is it possible that multiple messages are in the sb? // Consider whether it's necessary to replace with newline. dataSender.StrBuilder.Replace("\0", null); // Removes them. // Dispatch Event SocketMessageReceivedArgs args = new SocketMessageReceivedArgs(); args.Message = dataSender.StrBuilder.ToString(); args.ClientId = dataSender.ClientId; args.ClientAddress = dataSender.UniqueAddress; MessageReceived(this, args); dataSender.StrBuilder.Clear(); } try { dataSender.ClientSocket.BeginReceive(dataSender.buffer, 0, LogClient.BufferSize, 0, new AsyncCallback(this.OnDataReceived), dataSender); } catch (SocketException) { } } else { closeSocket(dataSender.UniqueAddress); } } catch (SocketException) { // TODO: should we closeSocketSilent()? Or? } catch (ObjectDisposedException) { // TODO: should we closeSocketSilent()? Or? } }