private void ResponseData(string sendData) { string strSend = SocketHelper.EnsureEOF(sendData, _entity.Config.SendEndSign); if (SocketLogMgt.DumpData) { SocketLogMgt.SetLog(this, _logID + ": Data to be sent."); SocketLogMgt.SetLog(this, "------------------------"); SocketLogMgt.SetLog(this, strSend); SocketLogMgt.SetLog(this, "------------------------"); } byte[] byteData = null; if (_entity.Config.IncludeHeader) { byteData = SocketHelper.GetResponseByteWithHeader(_entity.Encoder, strSend, _entity.Config); } else { byteData = _entity.Encoder.GetBytes(strSend); } if (byteData == null) { SocketLogMgt.SetLog(SocketLogType.Error, "Encode data failed."); } else { _socket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(OnDataSent), null); } }
private void OnDataReceived(IAsyncResult asyn) { int bytesRead = _socket.EndReceive(asyn); //------------Handle Multi-byte Charactor------------- _bufferList = new List <BufferWrapper>(); //---------------------------------------------------- do { bytesRead = _socket.Receive(_buffer); SocketLogMgt.SetLog(this, _logID + "Receive succeeded. " + bytesRead.ToString() + " bytes."); //------------Handle Multi-byte Charactor------------- _bufferList.Add(BufferWrapper.Create(_buffer, bytesRead)); //foreach (BufferWrapper w in _bufferList) SocketLogMgt.SetLog(">>>>>>>>>>>> " + w.Buffer.Length.ToString()); //---------------------------------------------------- if (bytesRead > 0) { //No matter how to cut the buffer, ASCII charactor can always be decoded properly, //therefore we can use this segment to detect whether an ending sign (for example "</XMLRequestMessage>") is received. //See class XmlTest.FormCoding for unit test. string str = _entity.Encoder.GetString(_buffer, 0, bytesRead); _sb.Append(str); if (SocketLogMgt.DumpData) { SocketLogMgt.SetLog(this, _logID + ": Data received."); SocketLogMgt.SetLog(this, "------------------------"); SocketLogMgt.SetLog(this, str); SocketLogMgt.SetLog(this, "------------------------"); } string receiveData = _sb.ToString(); if (SocketHelper.IsEOF(receiveData, _entity.Config.ReceiveEndSign)) { string sendData = null; //------------Handle Multi-byte Charactor------------- receiveData = BufferWrapper.GetString(_entity.Encoder, _bufferList); _bufferList = null; //---------------------------------------------------- _entity.NotifyRequest(receiveData, ref sendData); ResponseData(sendData); break; } } }while (bytesRead > 0); }