private void OnReceive(SocketAsyncEventArgs e) { string message = Encoding.ASCII.GetString(e.Buffer, e.Offset, e.BytesTransferred); SimpleSocketData data = new SimpleSocketData(); data.Message = message; data.SimpleSocketEventArgs = e; // Console.WriteLine(message); OnMessageReceive(data); // Start for receiving if the socket is not already in receive mode from // ProcessSend() method. This can occure if the server only want to receive // data but not send anything in return. Although this is not very likely that is // gonna happen but who knows! try { bool willReaiseEvent = (e.UserToken as AsyncUserToken).Socket.ReceiveAsync(e); if (!willReaiseEvent) { ProcessReceive(e); } } catch (Exception) { } // do nothing because the socket is already listening for incoming connection }
public void SendMessage(SimpleSocketData data) { SocketAsyncEventArgs eventArgs = data.SimpleSocketEventArgs; string message = data.Message; if (null != message && message.Trim() != "") { // send the message byte[] buffer = Encoding.ASCII.GetBytes(message); eventArgs.SetBuffer(buffer, 0, message.Length); AsyncUserToken token = eventArgs.UserToken as AsyncUserToken; bool willRaiseEvent = token.Socket.SendAsync(eventArgs); if (!willRaiseEvent) { ProcessSend(eventArgs); } } }
public abstract void OnMessageReceive(SimpleSocketData data);