Ejemplo n.º 1
0
        private void ProcessSend()
        {
            try
            {
                if (m_cStatus != SESSION_STATUS.CONNECT_SUCCESS)
                {
                    return;
                }
                if (Time.time - mSendStartTime < SEND_INTERVAL_TIME)
                {
                    return;
                }

                int _packsize = 0;
                m_cSendBuffer.Clear();
                for ( ; mQueSend.Count > 0;)
                {
                    byte[] que_buffer = mQueSend.Peek();
                    if ((_packsize > 0 && que_buffer.Length + _packsize > SEND_MAX_SIZE) || que_buffer == null)
                    {
                        break;
                    }
                    _packsize += que_buffer.Length;
                    m_cSendBuffer.Write(que_buffer, que_buffer.Length);
                    mQueSend.Dequeue();
                }
                if (m_cSendBuffer.GetSize() > 0)
                {
                    if (m_cSocket == null)
                    {
                        throw new Exception("The socket is null.");
                    }
                    byte[] buffer = m_cSendBuffer.Read(m_cSendBuffer.GetSize());
                    if (buffer == null)
                    {
                        throw new Exception("The the send buffer is null.");
                    }

                    //加密
                    //buffer = Packing.PackingEncode(buffer, pb.GetSize() );

                    mSendStartTime = Time.time;

                    m_cSocket.BeginSend(buffer, 0, buffer.Length,
                                        SocketFlags.DontRoute, new AsyncCallback(SendCallBack), m_cSocket);
                }
            }
            catch (Exception e)
            {
                Debug.LogError(e.StackTrace);
                ChangeStatus(SESSION_STATUS.CONNECT_FAILED_CONNECT_ERROR);
            }
        }
Ejemplo n.º 2
0
        private void ProcessReceive()
        {
            m_cReceiveQueue.Switch();

            while (!m_cReceiveQueue.Empty())
            {
                m_cReceiveBuffer.Write(m_cReceiveQueue.Pop());
            }

            for ( ; m_cReceiveBuffer.GetSize() >= HEAD_SIZE;)
            {
                UInt16 pack_size = 0;
                int    offset    = 0;
                offset += tcpsession_decode16u(m_cReceiveBuffer.m_lstBuffer, offset, ref pack_size);
                if (m_cReceiveBuffer.GetSize() >= HEAD_SIZE + pack_size)
                {
                    byte[] buffer = m_cReceiveBuffer.Read(HEAD_SIZE + pack_size);

                    //decrypt
                    //buffer = Packing.PackingDecode(buffer, head.m_usPacketSize);

                    if (buffer != null)
                    {
                        if (mCallback != null)
                        {
                            mCallback(EVENT.DATA_RECEIVE, buffer, null);
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
        }