コード例 #1
0
        private void enqeueIncomingPacket()
        {
            int    inPacksize   = rxBuf[1] | rxBuf[2] << 8;
            string packetNumber = rxBuf[3].ToString("X2");
            string packetName   = "TeslaCommunication.Packets.Packet_" + packetNumber;

            try
            {
                AbstractInPacket pack = null;
                Type             t    = Type.GetType(packetName);
                ConstructorInfo  c    = t.GetConstructor(new Type[] { });
                pack = (AbstractInPacket)c.Invoke(new object[] { });

                if (pack != null)
                {
                    pack.Command = rxBuf[3];
                    int bodySize = inPacksize - EMPTY_SIZE;
                    if (bodySize > 0)
                    {
                        pack.BodySize = bodySize;
                        pack.ApplyBody(rxBuf, 4, bodySize);
                    }
                    receivedPackets.Enqueue(pack);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error instantiate packet " + packetName);
            }
        }
コード例 #2
0
 private void processIncomingPacket()
 {
     while (receivedPackets.Count > 0)
     {
         AbstractInPacket pack = receivedPackets.Dequeue();
         if (pack.Command == 0x01)
         {
             currentState = ((Packet_01)pack).state;
         }
         else
         {
             pack.Process();
         }
     }
 }