Exemplo n.º 1
0
        public void GetMsg(object o)
        {
            while (m_isSocketReady)
            {
                int recieveLen = 0;
                try
                {
                    if (m_mySocket.Available > 0)
                    {
                        recieveLen = m_mySocket.Client.Receive(m_getData, 0, (int)m_mySocket.ReceiveBufferSize, SocketFlags.None);
                    }
                    else
                    {
                        System.Threading.Thread.Sleep(1);
                        break;
                    }
                }
                catch (Exception e)
                {
                    DEBUG.Error(e.Message);
                    break;
                }

                m_readBuffer.Put(m_getData, 0, recieveLen);
                Array.Clear(m_getData, 0, m_getData.Length);
                m_readBuffer.Flip();
                int len = GetPacketLength(m_readBuffer);

                if (len < 0)
                {
                    break;
                }

                MessageBody msg = new MessageBody();
                msg.size = (uint)CPacket.PopPacketLength(m_readBuffer);
                msg.type = (ushort)CPacket.PopPacketType(m_readBuffer);
                byte[] data = new byte[len - CPacket.HEADER_TYPE_BYTES];
                m_readBuffer.Get(data, 0, len - CPacket.HEADER_TYPE_BYTES);
                msg.data = data;

                m_recievedMsgs.Add(msg);

                bool isFinish = false;
                if (m_readBuffer.HasRemaining)
                {
                    m_readBuffer.Compact();
                }
                else
                {
                    m_readBuffer.Clear();
                    isFinish = true;
                }

                if (isFinish)
                {
                    break;
                }
            }
        }
Exemplo n.º 2
0
            public void Write(IoBuffer buf)
            {
                if (_closed)
                {
                    return;
                }

                lock (_syncRoot)
                {
                    if (_buf.HasRemaining)
                    {
                        _buf.Compact().Put(buf).Flip();
                    }
                    else
                    {
                        _buf.Clear().Put(buf).Flip();
                        Monitor.PulseAll(_syncRoot);
                    }
                }
            }
Exemplo n.º 3
0
        /// <summary>
        /// Writes the given buffer.
        /// </summary>
        public void Write(IoBuffer buf)
        {
            if (CanRead)
            {
                if (_closed)
                {
                    return;
                }

                lock (_syncRoot)
                {
                    if (_buf.HasRemaining)
                    {
                        _buf.Compact().Put(buf).Flip();
                    }
                    else
                    {
                        _buf.Clear().Put(buf).Flip();
                        Monitor.PulseAll(_syncRoot);
                    }
                }
            }
            else if (CanWrite)
            {
                if (!_session.Connected)
                {
                    throw new IOException("The session has been closed.");
                }

                _lastWriteFuture = _session.Write(buf);
            }
            else
            {
                throw new NotSupportedException();
            }
        }