public GatewayAliveChecker(Gateway gateway)
 {
     this.gateway = gateway;
     gateway.OnUnexpectedlyDisconnected += Stop;
     gateway.OnDisconnected += Stop;
     gateway.OnConnected += Start;
     gateway.OnMessageRecieved += OnMessageRecieved;
     checkGatewayTimer.Elapsed += CheckGatewayAlive;
 }
        private static void OnGatewayConnected()
        {
            gateway = SystemController.gateway;

            gateway.OnMessageRecieved += OnMessageRecieved;
            gateway.OnMessageSend += OnMessageSend;
            gateway.OnConnected += OnConnected;
            gateway.OnDisconnected += OnDisconnected;
            gateway.OnNewNode += OnNewNode;
            gateway.OnNodeUpdated += OnNodeUpdated;
            gateway.OnNodeLastSeenUpdated += OnNodeLastSeenUpdated;
            gateway.OnNodeBatteryUpdated += OnNodeBatteryUpdated;
            gateway.OnNewSensor += OnNewSensor;
            gateway.OnSensorUpdated += OnSensorUpdated;
            gateway.OnRemoveAllNodes += OnRemoveAllNodes;
            gateway.OnRemoveNode += OnRemoveNode;
        }
        public MySensorsNodesEngine(Gateway gateway, NodesEngine engine)
        {
            MySensorsNodesEngine.gateway = gateway;
            MySensorsNodesEngine.mySensorsNodesEngine = this;
            MySensorsNodesEngine.engine = engine;

            gateway.OnNewNode += CreateOrUpdateNode;
            gateway.OnNodeUpdated += CreateOrUpdateNode;
            gateway.OnNewSensor += CreateOrUpdateSensor;
            gateway.OnSensorUpdated += CreateOrUpdateSensor;
            gateway.OnRemoveAllNodes += OnGatewayRemoveAllNodes;
            gateway.OnRemoveNode += OnGatewayRemoveNode;
            gateway.OnNodeBatteryUpdated += OnNodeBatteryUpdated;
            engine.OnRemoveAllNodesAndLinks += OnEngineRemoveAllNodesAndLinks;
            engine.OnRemoveNode += OnEngineRemoveNode;
            CreateAndAddMySensorsNodes();
        }
        public static void DisconnectGateway()
        {
            if (gateway == null)
                return;

            if (gateway.GetGatewayState() != GatewayState.Disconnected)
                gateway.Disconnect();

            gateway = null;
            mySensorsNodesEngine = null;
        }
        public static void ConnectToGateway()
        {
            mySensorsNodesEngine = null;

            if (gatewayConfig.SerialGatewayConfig.Enable)
            {
                gatewayConnectionPort = new SerialConnectionPort(
                    gatewayConfig.SerialGatewayConfig.SerialPortName,
                    gatewayConfig.SerialGatewayConfig.Boudrate);
            }
            else if (gatewayConfig.EthernetGatewayConfig.Enable)
            {
                gatewayConnectionPort = new EthernetConnectionPort(
                    gatewayConfig.EthernetGatewayConfig.GatewayIP,
                    gatewayConfig.EthernetGatewayConfig.GatewayPort);
            }
            else return;

            //connecting to gateway
            logs.AddSystemInfo("Connecting to gateway...");

            gateway = new Gateway(gatewayConnectionPort, mySensorsDb, mySensorsMessagesDb);

            gateway.enableAutoAssignId = gatewayConfig.EnableAutoAssignId;

            gateway.OnLogDecodedMessage += logs.AddGatewayDecodedMessage;
            gateway.OnLogMessage += logs.AddGatewayMessage;
            gateway.OnLogInfo += logs.AddGatewayInfo;
            gateway.OnLogError += logs.AddGatewayError;
            gateway.endlessConnectionAttempts = true;
            gateway.OnConnected += GatewayConnected;
            gateway.OnDisconnected += GatewayDisconnected;

            gateway.Connect().Wait();

            if (gateway != null && nodesEngine != null)
                mySensorsNodesEngine = new MySensorsNodesEngine(gateway, nodesEngine);

            if (gateway != null && gateway.IsConnected())
            {
                logs.AddSystemInfo("Gateway connected.");
            }
            else
                logs.AddSystemInfo("Gateway is not connected.");

        }