public override void OnRecvData(byte[] bytes, int dataBegin, int dataLen) { int bytesOffset = dataBegin; int bytesEnd = dataBegin + dataLen; while (bytesOffset < bytesEnd) { if (m_parseBufferOffset < CONTENT_LEN_DESCRIPT_SIZE) { int copyLen = CONTENT_LEN_DESCRIPT_SIZE - m_parseBufferOffset; if (copyLen > bytesEnd - bytesOffset) { copyLen = bytesEnd - bytesOffset; } Array.Copy(bytes, bytesOffset, m_parseBuffer, m_parseBufferOffset, copyLen); bytesOffset += copyLen; m_parseBufferOffset += copyLen; if (bytesOffset >= bytesEnd) { break; } } int ctxLen = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(m_parseBuffer, 0)); if (ctxLen > PROTOCOL_MAX_SIZE || ctxLen < PROTOCOL_LEN_DESCRIPT_SIZE) { AppLog.Info("OnSocketRecvData ctxLen " + ctxLen.ToString()); m_netAgent.Close(); return; } { int copyLen = CONTENT_LEN_DESCRIPT_SIZE + ctxLen - m_parseBufferOffset; if (copyLen > bytes.Length - bytesOffset) { copyLen = bytes.Length - bytesOffset; } Array.Copy(bytes, bytesOffset, m_parseBuffer, m_parseBufferOffset, copyLen); bytesOffset += copyLen; m_parseBufferOffset += copyLen; if (m_parseBufferOffset >= CONTENT_LEN_DESCRIPT_SIZE + ctxLen) { int protocolId = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(m_parseBuffer, CONTENT_LEN_DESCRIPT_SIZE)); int protobufBegin = CONTENT_LEN_DESCRIPT_SIZE + PROTOCOL_LEN_DESCRIPT_SIZE; int protobufLen = m_parseBufferOffset - protobufBegin; m_parseBufferOffset = 0; try { this.OnRecvMsg(protocolId, m_parseBuffer, protobufBegin, protobufLen); } catch (Exception e) { AppLog.Exception(e); } } } } }
void OnSocketClose() { m_state = NetAgentState.Closed; m_error_num = m_socket.GetErrorNum(); m_error_msg = m_socket.GetErrorMsg(); if (null != m_handler) { m_handler.OnClose(m_error_num, m_error_msg); } AppLog.Info("OnSocketClose"); }
void OnSocketOpen(bool isSucc) { m_state = isSucc ? NetAgentState.Connected : NetAgentState.Closed; if (null != m_handler) { m_handler.OnOpen(isSucc); } if (!isSucc) { this.Close(); } AppLog.Info("OnSocketOpen"); }