Пример #1
0
    //private void ImcomingThreadFunc()
    //{
    //    do
    //    {
    //        DoIncoming();
    //        System.Threading.Thread.Sleep(1);
    //    } while (IsWorking_);
    //}

    public void DoOutgoing()
    {
        if (!CanFlush_)
        {
            return;
        }
        //lock (Socket_)
        //{
        if (!Socket_.Connected)
        {
            return;
        }
        if (OutgoingBuffer_.Length != 0)
        {
            //发送
            if (Socket_.Poll(0, System.Net.Sockets.SelectMode.SelectWrite))
            {
                try
                {
                    int sended = Socket_.Send(OutgoingBuffer_.Memory, OutgoingBuffer_.RdPtr(), OutgoingBuffer_.Length, System.Net.Sockets.SocketFlags.None);
                    OutgoingBuffer_.RdPtr(sended);
                    OutgoingBuffer_.Crunch();
                    TotalOutgoing_ += sended;

                    CanFlush_ = false;
                }
                catch (System.Net.Sockets.SocketException se)
                {
                    ClientLog.Instance.Log("Exception at DoOutgoing" + se.ErrorCode);
                    LastError_ = se.ErrorCode;
                }
            }
        }
        //}
    }
Пример #2
0
    public void DoIncoming()
    {
        //lock (Socket_)
        //{
        if (!Socket_.Connected)
        {
            return;
        }
        if (Socket_.Poll(0, System.Net.Sockets.SelectMode.SelectRead))
        {
            try
            {
                int recved = Socket_.Receive(IncomingBuffer_.Memory, IncomingBuffer_.WrPtr(), IncomingBuffer_.Space, System.Net.Sockets.SocketFlags.None);
                IncomingBuffer_.WrPtr(recved);
                TotalIncoming_ += recved;
                // ClientLog.Instance.LogError("Incoming once");
            }
            catch (System.Net.Sockets.SocketException se)
            {
                ClientLog.Instance.Log("Exception at DoIncoming" + se.ErrorCode);
                LastError_ = se.ErrorCode;
            }
        }
        //}

        //lock (IncomingBuffer_)
        //{
        //if (RecvBuffer_.Length != 0)
        //{
        //    //解压
        //    RecvBuffer_.Decompression(IncomingBuffer_);

        //}
        //}
    }
Пример #3
0
    public bool Reset()
    {
        if (!IsWorking_)
        {
            return(true);
        }

        bool hasData = false;

        while (IsConneted && LastError == 0)
        {
            if (Socket_.Poll(0, System.Net.Sockets.SelectMode.SelectRead))
            {
                try
                {
                    if (0 >= Socket_.Receive(IncomingBuffer_.Memory, IncomingBuffer_.WrPtr(), IncomingBuffer_.Space, System.Net.Sockets.SocketFlags.None))
                    {
                        break;
                    }
                    else
                    {
                        hasData = true;
                    }
                }
                catch (System.Net.Sockets.SocketException se)
                {
                    ClientLog.Instance.Log("Exception at Reset" + se.ErrorCode);
                    LastError_ = se.ErrorCode;
                    break;
                }
            }
            else
            {
                break;
            }
        }
        IncomingBuffer_.Reset();
        OutgoingBuffer_.Reset();
        return(hasData);
    }