예제 #1
0
파일: MsgrClient.cs 프로젝트: tkiapril/aura
		protected override byte[] BuildPacket(Packet packet)
		{
			var packetSize = packet.GetSize();

			// Calculate header size
			var headerSize = 3;
			int n = packetSize;
			do { headerSize++; n >>= 7; } while (n != 0);

			// Write header
			var result = new byte[headerSize + packetSize];
			result[0] = 0x55;
			result[1] = 0x12;
			result[2] = 0x00;

			// Length
			var ptr = 3;
			n = packetSize;
			do
			{
				result[ptr++] = (byte)(n > 0x7F ? (0x80 | (n & 0xFF)) : n & 0xFF);
				n >>= 7;
			}
			while (n != 0);

			// Write packet
			packet.Build(ref result, ptr);

			return result;
		}
예제 #2
0
		protected override byte[] BuildPacket(Packet packet)
		{
			var result = new byte[6 + packet.GetSize() + 4]; // header + packet + checksum
			result[0] = 0x88;
			System.Buffer.BlockCopy(BitConverter.GetBytes(result.Length), 0, result, 1, sizeof(int));
			packet.Build(ref result, 6);

			return result;
		}
예제 #3
0
파일: Packet.cs 프로젝트: pie3467/aura
 /// <summary>Writes packet as bin and the length of it as int to buffer.</summary>
 public Packet PutBin(Packet packet)
 {
     var val = packet.Build(false);
     return this.PutInt(val.Length).PutBin(val);
 }
예제 #4
0
파일: BaseClient.cs 프로젝트: pie3467/aura
        /// <summary>
        /// Builds buffer from packet and sends it.
        /// </summary>
        /// <param name="packet"></param>
        public virtual void Send(Packet packet)
        {
            // Don't log internal packets
            //if (packet.Op < Op.Internal.ServerIdentify)
            //    Log.Debug("S: " + packet);

            this.Send(packet.Build());
        }