public IdpPacket ProcessPayload(UInt16 nodeAddress, IdpPacket packet) { var incoming = new IncomingTransaction(packet); var outgoing = new OutgoingTransaction(0xA000, incoming.TransactionId, IdpCommandFlags.None); if (_commandHandlers.ContainsKey(incoming.CommandId)) { outgoing.Write((byte)IdpResponseCode.OK); outgoing.Write(incoming.CommandId); var responseCode = _commandHandlers[incoming.CommandId](incoming, outgoing); if (incoming.Flags.HasFlag(IdpCommandFlags.ResponseExpected)) { outgoing.WithResponseCode(responseCode); return(outgoing.ToPacket(nodeAddress, packet.Source)); } } else { outgoing.Write((byte)IdpResponseCode.UnknownCommand); outgoing.Write(incoming.CommandId); return(outgoing.ToPacket(nodeAddress, packet.Source)); } return(null); }
private bool SendRequest(IPacketTransmit adaptor, UInt16 source, UInt16 destination, OutgoingTransaction request) { return(adaptor.Transmit(request.ToPacket(source, destination))); }