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