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; } } }
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); } } }
/// <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(); } }