public void ReceivePacket(HastyPacket packet)
 {
     lock (packetsToProcess)
     {
         packetsToProcess.Add(packet);
     }
 }
示例#2
0
        void InternalPacket(HastyPacket packet)
        {
            log.Debug("Received internal packet: {0}", packet);
            var octetReader = new OctetReader(packet.Octets, log);

            octetReader.ReadUint8();
            var streamReader = new StreamReader(octetReader, log);

            switch (packet.Command)
            {
            case Commands.ConnectResult:
                ConnectResult(streamReader);
                break;

            case Commands.LoginResult:
                LoginResult(streamReader);
                break;

            case Commands.StreamData:
                StreamData(streamReader);
                break;

            case Commands.Ping:
                Ping(streamReader);
                break;

            case Commands.Pong:
                Pong(streamReader);
                break;

            default:
                throw new Exception(string.Format("Unknown internal command {0}", packet.Command));
            }
        }
示例#3
0
        public void Add(byte[] octets)
        {
            // log.Debug("Adding to receive stream:{0:X}", octets);
            queue.Enqueue(octets, 0, octets.Length);
            HastyPacket packet = null;

            do
            {
                var octetCount = queue.Peek(targetBuffer, 0, targetBuffer.Length);

                if (octetCount == 0)
                {
                    // log.Debug("octetCount zero");
                    return;
                }
                int newOffset;
                packet = PacketDecoder.Decode(targetBuffer, 0, octetCount, out newOffset, log);

                if (packet != null)
                {
                    // log.Debug("Got packet!");
                    queue.Skip(newOffset);
                    packetReceiver.ReceivePacket(packet);
                }
                else
                {
                    // log.Debug("No packet so far");
                }
            } while (packet != null);
        }
        private void ProcessPacket(HastyPacket packet)
        {
            var commandTarget = targetCreator.FindCommandTarget(packet.Command, 1);

            if (commandTarget == null)
            {
                var e = new Exception(string.Format("Couldn't find command {0}", packet.Command));
                log.Exception(e);
                throw e;
            }
            var octetReader = new OctetReader(packet.Octets, log);

            octetReader.ReadUint8();
            var stream = new StreamReader(octetReader, log);

            commandTarget.Execute(stream);
        }
示例#5
0
        void WritePacket(HastyPacket packet)
        {
            if (connection == null)
            {
                log.Warning("CAN NOT SEND. NO CONNECTION!");
                return;
            }

            // log.Debug("Sending packet:{0} {1}", packet, OctetBufferDebug.OctetsToHex(packet.Octets));

            var stream = createStreamWriter();

            stream.WriteLength((ushort)packet.Length);
            stream.WriteOctets(packet.Octets);
            var octets = stream.Close();

            connection.Write(octets);
        }
示例#6
0
 private void OnPacketRead(HastyPacket packet)
 {
     InternalPacket(packet);
 }
示例#7
0
        internal void Write(byte[] octets)
        {
            var packet = new HastyPacket(octets);

            WritePacket(packet);
        }