Example #1
0
		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;
		}