示例#1
0
 public int send(Byte_Buffer buffer)
 {
     send(buffer.rdata(), buffer.readable_length());
     return(0);
 }
示例#2
0
 public void copy(Byte_Buffer buffer)
 {
     copy(buffer.rdata(), buffer.readable_length());
 }
示例#3
0
        public void process_buffer(Endpoint ep, Byte_Buffer buffer)
        {
            Player p = get_player(ep);

            while (buffer.readable_length() > 0)
            {
                if (p.end_point.merge_state == 0)
                {
                    uint read_len = 0;
                    if (p.end_point.len_data == null)
                    {
                        if (buffer.readable_length() < 2)
                        {
                            p.end_point.len_data    = new byte[2];
                            p.end_point.len_data[0] = (byte)buffer.read_int8();
                            p.end_point.merge_state = 1;
                            return;
                        }
                        read_len = buffer.read_uint16();
                    }
                    else
                    {
                        read_len = BitConverter.ToUInt16(p.end_point.len_data, 0);
                    }
                    uint len = (((read_len) & 0x1f) << 8) | (((read_len) & 0xff00) >> 8);
                    if (p.end_point.buffer_data == null)
                    {
                        if (buffer.readable_length() < (int)len)
                        {
                            p.end_point.buffer_data = new Byte_Buffer();
                            p.end_point.buffer_data.copy(buffer);
                            p.end_point.remain = (int)len - buffer.readable_length();
                            buffer.read_complete();
                            p.end_point.merge_state = 2;
                            return;
                        }
                        uint       cmd = buffer.read_uint8();
                        Bit_Buffer buf = new Bit_Buffer(buffer.rdata(), (int)len - 1);
                        buffer.rpos += ((int)len - 1);
                        process_packet(p, cmd, buf);
                    }
                    else
                    {
                        uint       cmd = p.end_point.buffer_data.read_uint8();
                        Bit_Buffer buf = new Bit_Buffer(p.end_point.buffer_data.rdata(), (int)len - 1);
                        process_packet(p, cmd, buf);
                        p.end_point.buffer_data = null;
                    }
                }
                else
                {
                    if (p.end_point.merge_state == 1)
                    {
                        p.end_point.len_data[1] = (byte)buffer.read_int8();
                        p.end_point.merge_state = 0;
                    }
                    else if (p.end_point.merge_state == 2)
                    {
                        if (buffer.readable_length() < p.end_point.remain)
                        {
                            p.end_point.buffer_data.copy(buffer);
                            p.end_point.remain -= buffer.readable_length();
                            buffer.read_complete();
                            return;
                        }
                        else
                        {
                            p.end_point.buffer_data.copy(buffer.rdata(), p.end_point.remain);
                            buffer.rpos            += p.end_point.remain;
                            p.end_point.merge_state = 0;
                        }
                    }
                }
            }
        }