Exemplo n.º 1
0
        public override void ProcessReceivedMessage(Communications.Messages.IMessage inputMessage)
        {
            OperationMessage message = (OperationMessage)inputMessage;

            if (message.OpCode == OperationMessage.OPCodes.ColorReadResponse)
            {
                ushort deviceAddress = (ushort)(((ushort)message.Args[1]) << 8 | message.Args[0]);
                Color  color         = Color.FromArgb(message.Args[2], message.Args[3], message.Args[4]);
                byte   mode          = message.Args[5];

                this.ProcessRGBLightReading(message.SourceAddress, deviceAddress, color, mode);
            }
            else if (message.OpCode == OperationMessage.OPCodes.DimmerReadResponse)
            {
                this.CallProcessMethod(message, this.ProcessDimmerReading);
            }
            else if (message.OpCode == OperationMessage.OPCodes.TemperatureReadResponse)
            {
                this.CallProcessMethod(message, this.ProcessTemperatureReading);
            }
            else if (message.OpCode == OperationMessage.OPCodes.HumidityReadResponse)
            {
                this.CallProcessMethod(message, this.ProcessHumidityReading);
            }
            else if (message.OpCode == OperationMessage.OPCodes.PresenceReadResponse)
            {
                this.CallProcessMethod(message, this.ProcessPresenceReading);
            }
            else if (message.OpCode == OperationMessage.OPCodes.LogicReadResponse)
            {
                this.CallProcessMethod(message, this.ProcessLogicReading);
            }
            else if (message.OpCode == OperationMessage.OPCodes.LuminosityReadResponse)
            {
                this.CallProcessMethod(message, this.ProcessLuminosityReading);
            }
            else if (message.OpCode == OperationMessage.OPCodes.PowerReadResponse)
            {
                this.CallProcessMethod(message, this.ProcessPowerReading);
            }
        }
Exemplo n.º 2
0
        public override void ProcessReceivedMessage(Communications.Messages.IMessage inputMessage)
        {
            OperationMessage message = (OperationMessage)inputMessage;

            if (message.OpCode == OperationMessage.OPCodes.ConfigWriteResponse)
            {
                if (this.currentWriteTransactions.ContainsKey(message.SourceAddress))
                {
                    //TODO: Check other params to avoid exceptions
                    var currentTransactionVars = this.currentWriteTransactions[message.SourceAddress];
                    var nodeTransaction        = currentTransactionVars.FragmentWriteTransaction;

                    if (nodeTransaction.IsCompleted)
                    {
                        using (UnitOfWork repository = UnitOfWork.GetInstance())
                        {
                            Node updatedNode = repository.NodeRespository.GetByNetworkAddress(nodeTransaction.DestinationAddress);

                            if (updatedNode.LastChecksumUpdate == currentTransactionVars.TimeFlag)
                            {
                                updatedNode.ConfigChecksum     = currentTransactionVars.Checksum;
                                updatedNode.LastChecksumUpdate = currentTransactionVars.TimeFlag;

                                repository.Commit();

                                PrintLog(false, string.Format("The node 0x{0:X4} has been updated successfully", updatedNode.Address));
                            }
                            else
                            {
                                this.SendConfiguration(updatedNode, repository.HomeRespository.GetHome());
                            }
                        }
                    }
                    else if (!nodeTransaction.ProcessResponse(message).Result)
                    {
                        //TODO: Check the problem
                    }
                }
            }
            else if (message.OpCode == OperationMessage.OPCodes.ConfigChecksumResponse)
            {
                ushort checksum = (ushort)(((ushort)message.Args[1]) << 8 | (ushort)message.Args[0]);

                PrintLog(false, string.Format("CHECKSUM RECEIVED FROM 0x{0:X4}: 0x{1:X4}", message.SourceAddress, checksum));

                if (this.waitingForChecksum.Contains(message.SourceAddress))
                {
                    this.waitingForChecksum.Remove(message.SourceAddress);

                    Node node;
                    Home home;

                    using (UnitOfWork repository = UnitOfWork.GetInstance())
                    {
                        node = repository.NodeRespository.GetByNetworkAddressWithConnectedHomeDevices(message.SourceAddress);
                        home = repository.HomeRespository.GetHome();
                    }

                    if (node == null)
                    {
                        PrintLog(true, "Node not present in the DB!");
                    }
                    else if (!node.ConfigChecksum.HasValue || node.ConfigChecksum != checksum)
                    {
                        this.SendConfiguration(node, home);
                    }
                    else
                    {
                        PrintLog(false, string.Format("The node 0x{0:X4} is up to date", node.Address));
                    }
                }
            }
        }
Exemplo n.º 3
0
 public override void ProcessReceivedMessage(Communications.Messages.IMessage inputMessage)
 {
     //Do Nothing
 }