public void ManageQueueIncident(string Topic, string PayLoad)
        {
            dynamic  json       = JValue.Parse(PayLoad);
            DateTime incidentTS = DateTime.Now;

            string errorMsg = "";
            long   newId    = 0;
            string message  = json.result.description + " From:" + json.result.cameraID;
            string strLat   = json.result.coordinates[1];
            string strLon   = json.result.coordinates[0];;


            IO.Swagger.DatabaseInterface.DBIncident dbI = new IO.Swagger.DatabaseInterface.DBIncident();
            if (!dbI.AddIncident(message, "CrowdingIncident", "[[" + strLat + "," + strLon + "]]", 4, "ONGOING", 100, PayLoad, incidentTS, "", "", "", "", "", ref errorMsg, ref newId))
            {
                System.Console.WriteLine("Failed to create incident:" + errorMsg);
            }
            else
            {
                dynamic jmsg = new JObject();
                jmsg.type             = "newincident";
                jmsg.incidentid       = newId;
                jmsg.status           = "ONGOING";
                jmsg.interventionplan = PayLoad;
                jmsg.prio             = 4;
                jmsg.timestamp        = DateTime.Now;
                string strMessage = jmsg.ToString();
                signalRSend("Incidents", strMessage);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Mange when a button press is detected on a tracker
        /// </summary>
        /// <param name="observation"></param>
        public void ManageButtonPress(string observation)
        {
            //Should be properly fixed later
            dynamic tmpPayload = JValue.Parse(observation);
            string  tmp        = tmpPayload.result;
            dynamic iPayload   = JValue.Parse(tmp);
            dynamic jmsgC      = new JObject();

            jmsgC.incidentid  = 0;
            jmsgC.description = "Tracker button pressed";
            jmsgC.type        = "ButtonPressed";
            double lat = iPayload.result.last_known_lat;
            double lon = iPayload.result.last_known_lon;

            jmsgC.position         = "[[" + lat.ToString().Replace(',', '.') + "," + lon.ToString().Replace(',', '.') + "]]";
            jmsgC.prio             = 0;
            jmsgC.status           = "ONGOING";
            jmsgC.probability      = 1.0;
            jmsgC.interventionplan = "";
            jmsgC.incidenttime     = iPayload.phenomenonTime;
            string   tmpDate  = iPayload.phenomenonTime;
            DateTime tmpDate2 = DateTime.Parse(tmpDate);

            jmsgC.wbid            = iPayload.result.tagId;
            jmsgC.telephone       = "";
            jmsgC.additionalMedia = "";
            jmsgC.mediaType       = "";


            string errorMessage = "";
            long   newid        = -1;

            //Update database with the new incident
            IO.Swagger.DatabaseInterface.DBIncident dbO = new IO.Swagger.DatabaseInterface.DBIncident();
            if (!dbO.AddIncident((string)jmsgC.description, (string)jmsgC.type, (string)jmsgC.position, 0, "ONGOING", 1.0, "", tmpDate2, (string)jmsgC.wbid, "", (string)jmsgC.additionalMedia, (string)jmsgC.mediaType, "", ref errorMessage, ref newid))
            {
                _logger.LogError("COPUpdater update incident failed {errorMessage}", errorMessage);
            }

            //Create and send signalR message
            dynamic message2 = new JObject();

            message2.type            = "newincident";
            message2.incidentid      = newid;
            message2.status          = "ONGOING";
            message2.incidenttype    = jmsgC.type;
            message2.prio            = 1.0;
            message2.timestamp       = DateTime.Now;
            message2.mediatype       = jmsgC.mediaType;
            message2.additionalmedia = jmsgC.additionalMedia;
            message2.wbid            = jmsgC.wbid;
            string strMessage = message2.ToString();

            connection.InvokeAsync("Incidents", strMessage).Wait();
        }
        public void ManageCameraIncident(string Topic, string PayLoad)
        {
            dynamic  json       = JValue.Parse(PayLoad);
            DateTime incidentTS = DateTime.Now;
            string   cameraID   = json.result.cameraid;

            if (cameraID == "" || cameraID == null)
            {
                cameraID = json.result.cameraID;
            }
            string errorMsg = "";
            long   newId    = 0;
            string message  = json.result.type + " " + json.result.description + " From:" + cameraID;
            string strLat   = "0.0";
            string strLon   = "0.0";

            IO.Swagger.DatabaseInterface.DBIncident dbI = new IO.Swagger.DatabaseInterface.DBIncident();
            if (!dbI.FindCameraCoords(cameraID, ref strLat, ref strLon))
            {
                Console.WriteLine("No matching Camera for:" + json.result.cameraID);
                return;
            }
            double latDiff = 0.0;
            double lonDiff = 0.0;
            double lat     = double.Parse(strLat, CultureInfo.InvariantCulture);
            double lon     = double.Parse(strLon, CultureInfo.InvariantCulture);

            CartesianToGeo(4, lat, lon, ref latDiff, ref lonDiff);
            int randLon = random.Next(-3, 3);
            int randLat = random.Next(-3, 3);

            lat += ((double)randLon) * latDiff;
            lon += ((double)randLat) * lonDiff;

            dbI = new IO.Swagger.DatabaseInterface.DBIncident();
            if (!dbI.AddIncident(message, IncidentType, "[[" + lat.ToString(CultureInfo.InvariantCulture) + "," + lon.ToString(CultureInfo.InvariantCulture) + "]]", 4, "ONGOING", 100, PayLoad, incidentTS, "", "", "", "", "", ref errorMsg, ref newId))
            {
                System.Console.WriteLine("Failed to create incident:" + errorMsg);
            }
            else
            {
                dynamic jmsg = new JObject();
                jmsg.type             = "newincident";
                jmsg.incidentid       = newId;
                jmsg.status           = "ONGOING";
                jmsg.interventionplan = PayLoad;
                jmsg.prio             = 4;
                jmsg.timestamp        = DateTime.Now;
                string strMessage = jmsg.ToString();
                signalRSend("Incidents", strMessage);
            }
        }
        public void ManageEnvironmentIncident(string Topic, string PayLoad)
        {
            dynamic  json       = JValue.Parse(PayLoad);
            DateTime incidentTS = DateTime.Now;

            string errorMsg = "";
            long   newId    = 0;
            string message  = json.result.description;
            string strLat   = "0.0";
            string strLon   = "0.0";

            XmlNode xLat = xSensors.SelectSingleNode("//Kalle[ogcid='" + json.result.name + "']/lat");

            if (xLat != null)
            {
                strLat = xLat.InnerText;
            }

            XmlNode xLon = xSensors.SelectSingleNode("//Kalle[ogcid='" + json.result.name + "']/lon");

            if (xLon != null)
            {
                strLon = xLon.InnerText;
            }

            IO.Swagger.DatabaseInterface.DBIncident dbI = new IO.Swagger.DatabaseInterface.DBIncident();
            if (!dbI.AddIncident(message, "Wind", "[[" + strLat + "," + strLon + "]]", 4, "ONGOING", 100, PayLoad, incidentTS, "", "", "", "", "", ref errorMsg, ref newId))
            {
                System.Console.WriteLine("Failed to create incident:" + errorMsg);
            }
            else
            {
                dynamic jmsg = new JObject();
                jmsg.type             = "newincident";
                jmsg.incidentid       = newId;
                jmsg.status           = "ONGOING";
                jmsg.interventionplan = PayLoad;
                jmsg.prio             = 4;
                jmsg.timestamp        = DateTime.Now;
                string strMessage = jmsg.ToString();
                signalRSend("Incidents", strMessage);
            }
        }
        public void ManageSoundIncident(string Topic, string PayLoad)
        {
            PayLoad = PayLoad.Replace("octave bands", "octavebands");
            dynamic  json       = JValue.Parse(PayLoad);
            DateTime incidentTS = json.phenomenonTime;

            string errorMsg = "";
            long   newId    = 0;
            string message  = json.result.ALERT;

            if (json.result.octavebands != null)
            {
                message += " " + json.result.octavebands;
            }
            message += " Source:" + json.result.microphoneID;
            if (json.result.measurement_type != null)
            {
                message += " Type:" + json.result.measurement_type;
            }
            if (json.result.microphoneType != null)
            {
                message += " Type:" + json.result.microphoneType;
            }

            IO.Swagger.DatabaseInterface.DBIncident dbI = new IO.Swagger.DatabaseInterface.DBIncident();
            if (!dbI.AddIncident(message, "SoundIncident", "", 4, "ONGOING", 100, PayLoad, incidentTS, "", "", "", "", "", ref errorMsg, ref newId))
            {
                System.Console.WriteLine("Failed to create incident:" + errorMsg);
            }
            else
            {
                dynamic jmsg = new JObject();
                jmsg.type             = "SoundIncident";
                jmsg.incidentid       = newId;
                jmsg.status           = "ONGOING";
                jmsg.interventionplan = PayLoad;
                jmsg.prio             = 4;
                jmsg.timestamp        = DateTime.Now;
                string strMessage = jmsg.ToString();
                signalRSend("Incidents", strMessage);
            }
        }
        public void ManageDSSIncident(string Topic, string PayLoad)
        {
            if (Topic == "/DSS/Overcrowding")
            {
                dynamic  json       = JValue.Parse(PayLoad);
                DateTime incidentTS = json.inputDataTimestamp;
                foreach (dynamic rec in json.recommendations)
                {
                    string errorMsg = "";
                    long   newId    = 0;
                    string strLat   = rec.latitude.ToString();
                    string strLon   = rec.longitude.ToString();
                    string recom    = rec.recommendation;

                    IO.Swagger.DatabaseInterface.DBIncident dbI = new IO.Swagger.DatabaseInterface.DBIncident();
                    if (!dbI.AddIncident("Over crowded area", "OVERCROWDED", "[[" + strLat + "," + strLon + "]]", 4, "ONGOING", 78.5, PayLoad, incidentTS, "", "", "", "", "", ref errorMsg, ref newId))
                    {
                        System.Console.WriteLine("Failed to create incident:" + errorMsg);
                    }
                    else
                    {
                        dynamic jmsg = new JObject();
                        jmsg.type       = "newincident";
                        jmsg.incidentid = newId;
                        jmsg.status     = "ONGOING";
                        jmsg.prio       = 4;
                        jmsg.timestamp  = DateTime.Now;
                        string strMessage = jmsg.ToString();
                        signalRSend("Incidents", strMessage);
                    }
                }
            }
            else if (Topic == "GOST/Datastreams(43)/Observations")
            {
                dynamic  json       = JValue.Parse(PayLoad);
                DateTime incidentTS = json.phenomenonTime;

                string errorMsg = "";
                long   newId    = 0;
                string strLat   = "0.0";
                string strLon   = "0.0";
                string confStr  = json.result.confidence;
                double conf     = double.Parse(confStr, CultureInfo.InvariantCulture);
                conf *= 100;
                string[] cameraIDs = json.result.camera_ids.ToObject <string[]>();


                IO.Swagger.DatabaseInterface.DBIncident dbI = new IO.Swagger.DatabaseInterface.DBIncident();
                if (!dbI.FindCameraCoords(cameraIDs[0], ref strLat, ref strLon))
                {
                    return;
                }
                if (!dbI.AddIncident("Fight Detected", "FIGHT", "[[" + strLat + "," + strLon + "]]", 4, "ONGOING", conf, PayLoad, incidentTS, "", "", "", "", "", ref errorMsg, ref newId))
                {
                    System.Console.WriteLine("Failed to create incident:" + errorMsg);
                }
                else
                {
                    dynamic jmsg = new JObject();
                    jmsg.type       = "newincident";
                    jmsg.incidentid = newId;
                    jmsg.status     = "ONGOING";
                    jmsg.prio       = 4;
                    jmsg.timestamp  = DateTime.Now;
                    string strMessage = jmsg.ToString();
                    signalRSend("Incidents", strMessage);
                }
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Manage an incident report from smart glasses
        /// </summary>
        /// <param name="observation">The recieved message</param>
        public void ManageIncidentReporter(string observation)
        {
            dynamic iPayload = JValue.Parse(observation);

            dynamic jmsgC = new JObject();

            /*
             * {
             *                "incidentid": 0,
             *                "description": "string",
             *                "type": "string",
             *                "position": "string",
             *                "prio": 0,
             *                "status": "string",
             *                "probability": 0,
             *                "interventionplan": "string",
             *                "incidenttime": "2018-12-07T13:20:12.639Z",
             *                "wbid": "string",
             *                "telephone": "string"
             *              }
             */
            jmsgC.incidentid = 0;
            string reportType = iPayload.result.reportType;

            if (reportType == "video" || reportType == "picture" || reportType == "audio")
            {
                jmsgC.description = reportType + " from " + iPayload.result.tagId;
            }
            else
            {
                jmsgC.description = iPayload.result.message;
            }
            jmsgC.type = "FieldReport";
            double lat = iPayload.result.lat;
            double lon = iPayload.result.lon;

            jmsgC.position         = "[[" + lat.ToString().Replace(',', '.') + "," + lon.ToString().Replace(',', '.') + "]]";
            jmsgC.prio             = 0;
            jmsgC.status           = "ONGOING";
            jmsgC.probability      = 1.0;
            jmsgC.interventionplan = "";
            jmsgC.incidenttime     = iPayload.phenomenonTime;
            string   tmpDate  = iPayload.phenomenonTime;
            DateTime tmpDate2 = DateTime.Parse(tmpDate);

            jmsgC.wbid      = iPayload.result.tagId;
            jmsgC.telephone = "";
            string temp = iPayload.result.message;

            string[] split = temp.Split("/");
            if (reportType == "video" || reportType == "picture" || reportType == "audio")
            {
                jmsgC.additionalMedia = split[split.GetUpperBound(0) - 1] + "/" + split[split.GetUpperBound(0)];
            }
            else
            {
                jmsgC.additionalMedia = "";
            }
            jmsgC.mediaType = iPayload.result.reportType;


            string errorMessage = "";
            long   newid        = -1;

            //Update database with the new incident
            IO.Swagger.DatabaseInterface.DBIncident dbO = new IO.Swagger.DatabaseInterface.DBIncident();
            if (!dbO.AddIncident((string)jmsgC.description, (string)jmsgC.type, (string)jmsgC.position, 0, "ONGOING", 1.0, "", tmpDate2, (string)jmsgC.wbid, "", (string)jmsgC.additionalMedia, (string)jmsgC.mediaType, "", ref errorMessage, ref newid))
            {
                _logger.LogError("COPUpdater update incident failed {errorMessage}", errorMessage);
            }

            //Create and send signalR message
            dynamic message2 = new JObject();

            message2.type            = "newincident";
            message2.incidentid      = newid;
            message2.status          = "ONGOING";
            message2.incidenttype    = jmsgC.type;
            message2.prio            = 1.0;
            message2.timestamp       = DateTime.Now;
            message2.mediatype       = jmsgC.mediaType;
            message2.additionalmedia = jmsgC.additionalMedia;
            message2.wbid            = jmsgC.wbid;
            string strMessage = message2.ToString();

            connection.InvokeAsync("Incidents", strMessage).Wait();
        }