示例#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);
        }
示例#2
0
 static public int _get_packet_total_len(NetCoreHeader h)
 {
     return(sizeof(ushort) + sizeof(ushort) + h.length);
 }
示例#3
0
		static public int _get_packet_total_len(NetCoreHeader h)
		{
			return sizeof(ushort)+sizeof(ushort)+h.length;
		}
示例#4
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;
		}
示例#5
0
 /// <summary>
 /// 获取网络包的总长
 /// </summary>
 /// <param name="h"></param>
 /// <returns></returns>
 int get_packet_total_len(NetCoreHeader h)
 {
     return(get_header_size() + h.length);
 }