Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }