Ejemplo n.º 1
0
        private void HandleXNLPacket(object sender, PacketEventArgs e)
        {
            XNLXCMPPacket xpkt = (XNLXCMPPacket)e.packet;
            XNLPacket     xnl  = xpkt.XNLData;

            switch (xnl.OpCode)
            {
            case OpCode.DeviceSysMapBroadcast:
                //Ignore for now...
                break;

            case OpCode.MasterStatusBroadcast:
                //Console.WriteLine("Got master status broadcast...");
                this.masterID = xnl.Source;
                break;

            case OpCode.DeviceAuthKeyReply:
                this.StartConnection((DevAuthKeyReplyPacket)xnl);
                break;

            case OpCode.DeviceConnectionReply:
                DevConnectionReplyPacket rp = (DevConnectionReplyPacket)xnl;
                this.xnlID = rp.AssignedID;
                break;

            case OpCode.DataMessage:
                if (this.GotDataPacket != null && (xnl.Destination.Int == 0 || xnl.Destination.Equals(this.xnlID)))
                {
                    this.GotDataPacket(this, new XNLEventArgs(xnl));
                    this.AckPacket(xnl);
                    break;
                }
                goto default;

            case OpCode.DataMessageAck:
                //This data message has been acknowledged by the master remove our retry attempts
                this.pendingTransactions.Remove(xnl.TransactionID);
                break;

            default:
                Console.WriteLine("Unhandled XNL Data: {0}", xnl);
                break;
            }
        }
Ejemplo n.º 2
0
        public void SendPacket(XNLPacket xnl)
        {
            if (xnl.OpCode == OpCode.DataMessage)
            {
                xnl.Source        = this.xnlID;
                xnl.Destination   = this.masterID;
                xnl.TransactionID = this.transactionID++;
                xnl.Flags         = this.flags++;
                if (this.flags > 0x07)
                {
                    this.flags = 0;
                }
                this.pendingTransactions[xnl.TransactionID] = xnl;
                System.Timers.Timer t = new System.Timers.Timer(5000);
                t.Elapsed += (sender, e) => this.ResendPacket(sender, e, xnl.TransactionID);
            }
            XNLXCMPPacket pkt = new XNLXCMPPacket(this.id, xnl);

            r.SendPacket(pkt);
        }