コード例 #1
0
ファイル: NetState.cs プロジェクト: wwjwxb/ServUO
        private void OnReceive(IAsyncResult asyncResult)
        {
            try
            {
                Socket s = (Socket)asyncResult.AsyncState;

                int byteCount = s.EndReceive(asyncResult);

                if (byteCount > 0)
                {
                    m_NextCheckActivity = Core.TickCount + 90000;

                    byte[] buffer;

                    lock (m_AsyncLock)
                        buffer = m_RecvBuffer;

                    if (PacketEncryptor != null)
                    {
                        PacketEncryptor.DecryptIncomingPacket(this, ref buffer, ref byteCount);
                    }

                    if (PacketEncoder != null)
                    {
                        PacketEncoder.DecodeIncomingPacket(this, ref buffer, ref byteCount);
                    }

                    lock (m_Buffer)
                        m_Buffer.Enqueue(buffer, 0, byteCount);

                    m_MessagePump.OnReceive(this);

                    lock (m_AsyncLock)
                    {
                        m_AsyncState &= ~AsyncState.Pending;

                        if ((m_AsyncState & AsyncState.Paused) == 0)
                        {
                            try
                            {
                                InternalBeginReceive();
                            }
                            catch (Exception ex)
                            {
                                TraceException(ex);
                                Dispose(false);
                            }
                        }
                    }
                }
                else
                {
                    Dispose(false);
                }
            }
            catch
            {
                Dispose(false);
            }
        }
コード例 #2
0
        private void OnReceive(IAsyncResult asyncResult)
        {
            lock (this)
            {
                if (Socket == null)
                {
                    return;
                }

                try
                {
                    var byteCount = Socket.EndReceive(asyncResult);

                    if (byteCount > 0)
                    {
                        m_NextCheckActivity = DateTime.UtcNow + TimeSpan.FromMinutes(1.2);

                        var buffer = m_RecvBuffer;

                        if (PacketEncoder != null)
                        {
                            PacketEncoder.DecodeIncomingPacket(this, ref buffer, ref byteCount);
                        }

                        Buffer.Enqueue(buffer, 0, byteCount);

                        Incoming += byteCount;

                        m_NetServer.OnReceive(this, byteCount);
                    }
                    else
                    {
                        Dispose(false);
                    }
                }
                catch (Exception ex)
                {
                    TraceException(ex);
                    Dispose(false);
                }
            }
        }