예제 #1
0
        internal void DelayClose(LPSocker socker)
        {
            if (LOG_ERROR(socker != null))
            {
                goto Exit0;
            }

            lock (m_DelayLocker)
            {
                socker.DelayCloseBeginTick = DateTime.Now.Ticks;
                if (socker.IsPassiveClosed)
                {
                    //被动关闭,无需延迟close socket
                    socker.DelayCloseDuration = 0;
                }
                else
                {
                    //主动关闭,需要等未发送完的数据发送完
                    socker.DelayCloseDuration = 3000;
                }

                m_DelayCloseList.PushRear(socker);
            }

Exit0:
            return;
        }
예제 #2
0
        internal void DelayRelease(LPSocker socker)
        {
            if (LOG_ERROR(socker != null))
            {
                goto Exit0;
            }

            lock (m_DelayLocker)
            {
                socker.DelayReleaseBeginTick = DateTime.Now.Ticks;
                if (socker.IsPassiveClosed)
                {
                    //被动关闭,无需延迟close socket
                    socker.DelayReleaseDuration = 0;
                }
                else
                {
                    //主动关闭,需要延迟释放,因为socker的close操作只关闭了发,
                    //如果不延迟释放,可能在收的过程访问到被释放的socker
                    socker.DelayReleaseDuration = 1500;
                }
                m_DelayReleaseList.PushRear(socker);
            }

Exit0:
            return;
        }
예제 #3
0
        internal LPSocker CreateSocker(Socket socket, ILPPacketParser packetParser, object parent, bool isAcceptCreate)
        {
            bool     result = false;
            LPSocker socker = null;

            if (LOG_ERROR(socket != null))
            {
                goto Exit0;
            }
            if (LOG_ERROR(packetParser != null))
            {
                goto Exit0;
            }

            socker = new LPSocker();
            if (LOG_ERROR(packetParser != null))
            {
                goto Exit0;
            }

            socker.ID             = _GenerateSockerID();
            socker.Sock           = socket;
            socker.Parent         = parent;
            socker.IsAcceptCreate = isAcceptCreate;
            socker.IsClosed       = false;
            socker.IsSending      = false;
            socker.PacketParser   = packetParser;

            socker.RecvBuf = new LPLoopBuf();
            if (LOG_ERROR(socker.RecvBuf != null))
            {
                goto Exit0;
            }

            result = socker.RecvBuf.Init(LP.RecvBufSize);
            if (LOG_ERROR(result))
            {
                goto Exit0;
            }

            socker.SendBuf = new LPLoopBuf();
            if (LOG_ERROR(socker.SendBuf != null))
            {
                goto Exit0;
            }

            result = socker.SendBuf.Init(LP.SendBufSize);
            if (LOG_ERROR(result))
            {
                goto Exit0;
            }

            lock (m_ValidListLocker)
            {
                result = m_ValidSockerList.PushRear(socker);
                if (LOG_ERROR(result))
                {
                    goto Exit0;
                }
            }

            return(socker);

Exit0:
            return(null);
        }