public void Send(Socket client, SocketDataBody data) { // Convert the string data to byte data using ASCII encoding. byte[] byteData = Encoding.ASCII.GetBytes(data.ToString()); // Begin sending the data to the remote device. client.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), client); }
public void ReadCallback(IAsyncResult ar) { SocketDataBody content = null; // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; Socket handler = state.workSocket; // Read data from the client socket. int bytesRead = handler.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.sb.Append(Encoding.ASCII.GetString( state.buffer, 0, bytesRead)); // Check for end-of-file tag. If it is not there, read // more data. content = JsonConvert.DeserializeObject <SocketDataBody>(state.sb.ToString()); if (content != null) { this.responseFabric.ReceiveResponse(content); var body = CommandsReflector.GetGlobalCommand(content.CommandName).Item1.Aggregate(content); content.Body = body; content.Type = SocketDataType.Receive; Send(handler, content); } else { // Not all data received. Get more. handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } } }
private void ReceiveCallback(IAsyncResult ar) { try { // Retrieve the state object and the client socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; Socket client = state.workSocket; // Read data from the remote device. int bytesRead = client.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead)); // Get the rest of the data. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); } else { // All the data has arrived; put it in response. if (state.sb.Length > 1) { response = JsonConvert.DeserializeObject <SocketDataBody>(state.sb.ToString()); this.responseFabric.ReceiveResponse(response); } // Signal that all bytes have been received. receiveDone.Set(); } } catch (Exception e) { Console.WriteLine("Cannot receive callback..."); } }