示例#1
0
        /// <summary>
        /// Reads the length from the packet header. (If a length is required for the specific packet type.)
        /// </summary>
        /// <param name="headerType">Type of the header.</param>
        /// <returns></returns>
        public ushort ReadLength(PacketHeaderType headerType)
        {
            // So we can go back to where we were.
            long   curPos = BaseStream.Position;
            ushort ret;

            switch (headerType)
            {
            case PacketHeaderType.AuthCmsg:
                // No length in this header.
                return(0);

            case PacketHeaderType.AuthSmsg:
                BaseStream.Seek(1, SeekOrigin.Begin);
                ret = ReadUInt16();
                break;

            case PacketHeaderType.WorldSmsg:
            case PacketHeaderType.WorldCmsg:
                //First 2 bytes in packet
                ret = ReadUInt16();
                break;

            default:
                throw new ArgumentOutOfRangeException("headerType");
            }
            // Go back to wherever we were in the stream and return our value
            BaseStream.Seek(curPos, SeekOrigin.Begin);
            return(ret);
        }
示例#2
0
        /// <summary>
        /// Reads the op code from the packet header.
        /// </summary>
        /// <param name="headerType">Type of the header.</param>
        /// <returns></returns>
        public ushort ReadOpCode(PacketHeaderType headerType)
        {
            // So we can go back to where we were.
            long curPos = BaseStream.Position;

            // Go to the beginning, as our opcodes start from there.
            base.BaseStream.Seek(0, SeekOrigin.Begin);
            ushort ret;

            switch (headerType)
            {
            case PacketHeaderType.AuthCmsg:
            case PacketHeaderType.AuthSmsg:
                ret = ReadByte();
                break;

            case PacketHeaderType.WorldSmsg:
            case PacketHeaderType.WorldCmsg:
                BaseStream.Seek(2, SeekOrigin.Begin);
                ret = ReadUInt16();
                break;

            default:
                throw new ArgumentOutOfRangeException("headerType");
            }
            // Go back to wherever we were in the stream and return our value
            BaseStream.Seek(curPos, SeekOrigin.Begin);
            return(ret);
        }
示例#3
0
 public Packet(PacketHeaderType header, ushort opCode)
 {
     HeaderType = header;
     Writer     = new PacketWriter(header);
     // Keep in mind; depending on the type of packet header passed,
     // this will write either a byte, or a ushort.
     Writer.WritePacketHeader(opCode);
 }
示例#4
0
 /// <summary>
 /// Skips the packet header.
 /// </summary>
 /// <param name="headerType">Type of the header.</param>
 public void SkipPacketHeader(PacketHeaderType headerType)
 {
     // Since the enum corresponds to the packet header length already,
     // we just skip it via the value.
     BaseStream.Seek((byte)headerType, SeekOrigin.Begin);
 }
示例#5
0
 public Message(PacketHeaderType headerByte)
     : base(headerByte)
 {
     Timeout = XpressNetConstants.RESPONSE_TIMEOUT;
 }
示例#6
0
 public Message(PacketHeaderType header, IEnumerable <byte> payload)
     : base(header, payload)
 {
     Timeout = XpressNetConstants.RESPONSE_TIMEOUT;
 }
示例#7
0
 internal PacketWriter(PacketHeaderType headerType, Stream output) : base(output, Encoding.UTF8)
 {
     _headerType = headerType;
 }
示例#8
0
 public PacketWriter(PacketHeaderType headerType)
     : this(headerType, new MemoryStream())
 {
 }
示例#9
0
        }                                                                                                   //we need to add the packet length to the lower nibble of the header before sending


        public Packet(PacketHeaderType header, IEnumerable <byte> payload)
            : this()
        {
            Header  = header;
            Payload = new List <byte>(payload);
        }
示例#10
0
        protected byte HeaderByte { get { return (byte)((Convert.ToByte(Header) << 4) | PayloadLength); } } //we need to add the packet length to the lower nibble of the header before sending


        public Packet(PacketHeaderType header, IEnumerable<byte> payload)
            : this()
        {
            Header = header;
            Payload = new List<byte>(payload);
        }
示例#11
0
        //private PacketHeaderType header;

        public PacketWriter(short opcode, PacketHeaderType headerType) : this(headerType, new MemoryStream())
        {
            Opcode = opcode;
        }
示例#12
0
 /// <summary>
 /// Skips the packet header.
 /// </summary>
 /// <param name="headerType">Type of the header.</param>
 public void SkipPacketHeader(PacketHeaderType headerType)
 {
     // Since the enum corresponds to the packet header length already,
     // we just skip it via the value.
     BaseStream.Seek((byte)headerType, SeekOrigin.Begin);
 }
示例#13
0
 /// <summary>
 /// Reads the op code from the packet header.
 /// </summary>
 /// <param name="headerType">Type of the header.</param>
 /// <returns></returns>
 public ushort ReadOpCode(PacketHeaderType headerType)
 {
     // So we can go back to where we were.
     long curPos = BaseStream.Position;
     // Go to the beginning, as our opcodes start from there.
     base.BaseStream.Seek(0, SeekOrigin.Begin);
     ushort ret;
     switch (headerType)
     {
         case PacketHeaderType.AuthCmsg:
         case PacketHeaderType.AuthSmsg:
             ret = ReadByte();
             break;
         case PacketHeaderType.WorldSmsg:
         case PacketHeaderType.WorldCmsg:
             BaseStream.Seek(2, SeekOrigin.Begin);
             ret = ReadUInt16();
             break;
         default:
             throw new ArgumentOutOfRangeException("headerType");
     }
     // Go back to wherever we were in the stream and return our value
     BaseStream.Seek(curPos, SeekOrigin.Begin);
     return ret;
 }
示例#14
0
 /// <summary>
 /// Reads the length from the packet header. (If a length is required for the specific packet type.)
 /// </summary>
 /// <param name="headerType">Type of the header.</param>
 /// <returns></returns>
 public ushort ReadLength(PacketHeaderType headerType)
 {
     // So we can go back to where we were.
     long curPos = BaseStream.Position;
     ushort ret;
     switch (headerType)
     {
         case PacketHeaderType.AuthCmsg:
             // No length in this header.
             return 0;
         case PacketHeaderType.AuthSmsg:
             BaseStream.Seek(1, SeekOrigin.Begin);
             ret = ReadUInt16();
             break;
         case PacketHeaderType.WorldSmsg:
         case PacketHeaderType.WorldCmsg:
             //First 2 bytes in packet
             ret = ReadUInt16();
             break;
         default:
             throw new ArgumentOutOfRangeException("headerType");
     }
     // Go back to wherever we were in the stream and return our value
     BaseStream.Seek(curPos, SeekOrigin.Begin);
     return ret;
 }
示例#15
0
 protected PacketWriter(PacketHeaderType headerType, Stream output)
     : base(output, Encoding.UTF8)
 {
     _headerType = headerType;
 }
示例#16
0
 public Packet(PacketHeaderType headerByte)
     : this()
 {
     Header = headerByte;
     Payload = new List<byte>();
 }
示例#17
0
 internal PacketWriter(PacketHeaderType headerType) : this(headerType, new MemoryStream())
 {
 }
示例#18
0
 public Packet(PacketHeaderType headerByte)
     : this()
 {
     Header  = headerByte;
     Payload = new List <byte>();
 }
示例#19
0
 //private PacketHeaderType header;
 public PacketWriter(short opcode, PacketHeaderType headerType)
     : this(headerType, new MemoryStream())
 {
     Opcode = opcode;
 }