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); } }
private void processIncomingPacket() { while (receivedPackets.Count > 0) { AbstractInPacket pack = receivedPackets.Dequeue(); if (pack.Command == 0x01) { currentState = ((Packet_01)pack).state; } else { pack.Process(); } } }