public object IoTStatusImageGetter(object rawObject)
        {
            cls_Monitor_Device_Info mdi = (cls_Monitor_Device_Info)rawObject;

            switch (mdi.iotclient_status)
            {
            case "Off":
                return("Off");

            case "Ready":
                return("Ready");

            /*
             * case "Run":
             *  return "Run";
             *
             * case "Down":
             *  return "Down";
             *
             * case "Idle":
             *  return "Idle";
             */
            default:
                return("Off");
            }
        }
        public void ReadDataAck(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Cmd/ReadData/Ack
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            if (ObjectManager.MonitorManager != null)
            {
                cls_Monitor_Device_Info mdv = ObjectManager.MonitorManager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();

                if (mdv != null)
                {
                    cls_ReadDataAck rc = new cls_ReadDataAck();

                    rc = JsonConvert.DeserializeObject <cls_ReadDataAck>(InputData.MQTTPayload.ToString());
                    if (rc.Cmd_Result == "OK")
                    {
                        mdv.device_status  = "Idle";
                        mdv.hb_status      = "Idle";
                        mdv.hb_report_time = DateTime.ParseExact(rc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        mdv.device_status  = "Down";
                        mdv.hb_status      = "Down";
                        mdv.hb_report_time = DateTime.ParseExact(rc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                    }
                }

                //Raise event to notify Online Monitor form to refresh status
                this.ObjectManager.OnHeartBeatEventCall(null);
            }
        }
        public object DeviceStatusImageGetter(object rawObject)
        {
            cls_Monitor_Device_Info mdi = (cls_Monitor_Device_Info)rawObject;

            switch (mdi.device_status)
            {
            case "Off":
                return("Off");

            case "Ready":
                return("Ready");

            case "Run":
                return("Run");

            case "Down":
                return("Down");

            case "Idle":
                return("Idle");

            default:
                return("Off");
            }
        }
        public void ConfigAck(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Cmd/Config/Ack
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            cls_ConfigAck ca = new cls_ConfigAck();

            ca = JsonConvert.DeserializeObject <cls_ConfigAck>(InputData.MQTTPayload.ToString());

            //Update IoTClient status in Online Monitor
            if (ObjectManager.MonitorManager != null)
            {
                //cls_Monitor_Gateway_Info gw = ObjectManager.MonitorManager.monitor_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();
                //if (gw != null)
                //{

                /*
                 * cls_Monitor_Device_Info dv = gw.device_list.Where(p => p.device_id == DeviceID).FirstOrDefault();
                 * if (dv != null)
                 * {
                 *
                 *  if(ca.Cmd_Result == "OK")
                 *  {
                 *      gw.iotclient_status =  "Ready";
                 *      dv.iotclient_status = "Ready";
                 *  }
                 *  else
                 *  {
                 *      gw.iotclient_status = "Off";
                 *      dv.iotclient_status = "Off";
                 *  }
                 * }
                 */

                cls_Monitor_Device_Info mdv = ObjectManager.MonitorManager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();
                if (mdv != null)
                {
                    if (ca.Cmd_Result == "OK")
                    {
                        mdv.iotclient_status = "Ready";
                    }
                    else
                    {
                        mdv.iotclient_status = "Off";
                    }
                }

                this.ObjectManager.OnConfigAckEventCall(null);
                //}
            }
        }
        public void ReceiveHeartBeat(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Status/HeartBeat
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            cls_HeartBeat hb = new cls_HeartBeat();

            hb = JsonConvert.DeserializeObject <cls_HeartBeat>(InputData.MQTTPayload.ToString());

            if (ObjectManager.MonitorManager != null)
            {
                //cls_Monitor_Gateway_Info gw = ObjectManager.MonitorManager.monitor_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();
                //if (gw != null)
                //{

                /*
                 *  cls_Monitor_Device_Info dv = gw.device_list.Where(p => p.device_id == DeviceID).FirstOrDefault();
                 *  if (dv != null)
                 *  {
                 *      gw.gateway_status = hb.Status;
                 *      gw.hb_report_time = DateTime.ParseExact(hb.HBDatetime, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                 *      gw.hb_status = hb.Status;
                 *
                 *      dv.device_status = hb.Status;
                 *      dv.hb_status = hb.Status;
                 *      dv.hb_report_time = DateTime.ParseExact(hb.HBDatetime, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                 *  }
                 */
                cls_Monitor_Device_Info mdv = ObjectManager.MonitorManager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();
                if (mdv != null)
                {
                    mdv.device_status  = hb.Status;
                    mdv.hb_status      = hb.Status;
                    mdv.hb_report_time = DateTime.ParseExact(hb.HBDatetime, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                }

                this.ObjectManager.OnHeartBeatEventCall(null);
                //}
            }
        }
        public void SetOnlineMonitorEDCReportStatus(string gw_id, string dv_id, string payload)
        {
            if (ObjectManager.MonitorManager != null)
            {
                //cls_Monitor_Gateway_Info gw = ObjectManager.MonitorManager.monitor_list.Where(p => p.gateway_id == gw_id).FirstOrDefault();
                //if (gw != null)
                //{
                //cls_Monitor_Device_Info dv = gw.device_list.Where(p => p.device_id == dv_id).FirstOrDefault();
                cls_Monitor_Device_Info mdv = ObjectManager.MonitorManager.device_list.Where(o => o.gateway_id == gw_id && o.device_id == dv_id).FirstOrDefault();
                if (mdv != null)
                {
                    cls_HeartBeat hb = new cls_HeartBeat();

                    cls_read_data_reply CollectData = null;
                    CollectData       = JsonConvert.DeserializeObject <cls_read_data_reply>(payload);
                    mdv.last_edc_time = DateTime.ParseExact(CollectData.Time_Stamp, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);

                    mdv.last_edc_time = DateTime.ParseExact(CollectData.Time_Stamp, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                }
                //}
            }
        }
        public void ReceiveAlarm(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Status/HeartBeat
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            cls_Alarm ca = new cls_Alarm();

            ca = JsonConvert.DeserializeObject <cls_Alarm>(InputData.MQTTPayload.ToString());

            cls_Monitor_Device_Info mdv = ObjectManager.MonitorManager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();

            if (mdv != null)
            {
                mdv.last_alarm_code     = ca.AlarmCode;
                mdv.last_alarm_app      = ca.AlarmApp;
                mdv.last_alarm_datetime = DateTime.ParseExact(ca.DateTime, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                mdv.last_alarm_message  = ca.AlarmDesc;
            }

            this.ObjectManager.OnAlarmEventCall(null);
        }
        public void StartAck(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Cmd/Start/Ack
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            cls_StartAck sc = new cls_StartAck();

            sc = JsonConvert.DeserializeObject <cls_StartAck>(InputData.MQTTPayload.ToString());

            if (ObjectManager.MonitorManager != null)
            {
                //cls_Monitor_Gateway_Info gw = ObjectManager.MonitorManager.monitor_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();
                //if (gw != null)
                //{

                /*
                 *  cls_Monitor_Device_Info dv = gw.device_list.Where(p => p.device_id == DeviceID).FirstOrDefault();
                 *  if (dv != null)
                 *  {
                 *      if(sc.Cmd_Result == "OK")
                 *      {
                 *          gw.gateway_status = "Ready";
                 *          gw.hb_status = "Ready";
                 *          gw.hb_report_time = DateTime.ParseExact(sc.Trace_ID, GlobalVaraible.DATETIME_FORMAT, CultureInfo.InvariantCulture);
                 *          dv.device_status = "Ready";
                 *          dv.hb_status = "Ready";
                 *          dv.hb_report_time = DateTime.ParseExact(sc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                 *
                 *          //Send message to notify IoTClient for receiving Gateway/Device configuration data
                 *          //SendCmdConfig(GateWayID, DeviceID);
                 *      }
                 *      else
                 *      {
                 *          gw.gateway_status = "Down";
                 *          gw.hb_status = "Down";
                 *          gw.hb_report_time = DateTime.ParseExact(sc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                 *          dv.device_status = "Down";
                 *          dv.hb_status = "Down";
                 *          dv.hb_report_time = DateTime.ParseExact(sc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                 *      }
                 *  }
                 */

                cls_Monitor_Device_Info mdv = ObjectManager.MonitorManager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();
                if (mdv != null)
                {
                    if (sc.Cmd_Result == "OK")
                    {
                        mdv.device_status  = "Ready";
                        mdv.hb_status      = "Ready";
                        mdv.hb_report_time = DateTime.ParseExact(sc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);

                        //Send message to notify IoTClient for receiving Gateway/Device configuration data
                        SendCmdConfig(GateWayID, DeviceID);
                    }
                    else
                    {
                        mdv.device_status  = "Down";
                        mdv.hb_status      = "Down";
                        mdv.hb_report_time = DateTime.ParseExact(sc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                    }
                }

                //Raise event to notify Online Monitor form to refresh status
                this.ObjectManager.OnStartAckEventCall(null);
                //}
            }
        }