protected virtual int OnSplitPacket() { byte[] recv_buf = mRecvBuffer.ToArray(); ByteArray total_buffer = new ByteArray(recv_buf); int header_size = _get_header_size(); int read = 0; int size_remain = recv_buf.Length; while (size_remain > header_size) // Recv data len must contain one header at least. { byte[] cur_buf = total_buffer.GetRange(read, header_size); ByteArray packet = new ByteArray(cur_buf); // Get header info. NetCoreHeader h = new NetCoreHeader(); packet.Get_(out h.length); packet.Get_(out h.encrypt); // Get packet's len. int packet_len = _get_packet_total_len(h); if (packet_len <= size_remain) { byte[] body = total_buffer.GetRange(read + _get_header_size(), h.length); if (h.encrypt == 24) { ParseSinglePack(body); } else { ParseMutiPack(body); } size_remain -= packet_len; read += packet_len; } else { // Wait for more data. break; } } return(read); }
static public int _get_packet_total_len(NetCoreHeader h) { return(sizeof(ushort) + sizeof(ushort) + h.length); }
static public int _get_packet_total_len(NetCoreHeader h) { return sizeof(ushort)+sizeof(ushort)+h.length; }
protected virtual int OnSplitPacket() { byte[] recv_buf = mRecvBuffer.ToArray(); ByteArray total_buffer = new ByteArray(recv_buf); int header_size = _get_header_size(); int read = 0; int size_remain = recv_buf.Length; while (size_remain > header_size) // Recv data len must contain one header at least. { byte[] cur_buf = total_buffer.GetRange(read, header_size); ByteArray packet = new ByteArray(cur_buf); // Get header info. NetCoreHeader h = new NetCoreHeader(); packet.Get_(out h.length); packet.Get_(out h.encrypt); // Get packet's len. int packet_len = _get_packet_total_len(h); if (packet_len <= size_remain) { byte[] body = total_buffer.GetRange(read + _get_header_size(), h.length); if (h.encrypt == 24) ParseSinglePack(body); else ParseMutiPack(body); size_remain -= packet_len; read += packet_len; } else { // Wait for more data. break; } } return read; }
/// <summary> /// 获取网络包的总长 /// </summary> /// <param name="h"></param> /// <returns></returns> int get_packet_total_len(NetCoreHeader h) { return(get_header_size() + h.length); }