private static void timer_park_information_and_update(object stateInfo) { mutex.WaitOne(); Console.WriteLine("######################Update Excel Information###########################"); foreach (LocationExcel locationExcel in locationCampus) { locationExcel.updateIfNeedUpdate(); } Console.WriteLine("####################END-Update Excel Information#########################"); Console.WriteLine("######################Park Information###########################"); //List<Provider> providersLocal = (List<Provider>)stateInfo; XmlDocument doc = new XmlDocument(); XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null); doc.AppendChild(dec); XmlElement listNote = doc.CreateElement("list"); foreach (Provider provider in providers) { ParkingInformation parkingInformation = new ParkingInformation(provider.parkInfoID, provider.parkInfoDescription, provider.parkInfoNumberOfSpots, provider.parkInfoNumberOfSpecialSpots, provider.parkInfoOperatingHours); listNote.AppendChild(parkingInformation.ToXML(doc)); } doc.AppendChild(listNote); Console.WriteLine(FunctionHelper.formatXmlToUnminifierString(doc)); Console.WriteLine("Sending information..."); Mosquitto.publishMosquitto(mClient, new string[] { "ParkDACE\\" }, doc.OuterXml); Console.WriteLine("######################END-Park Information#####################\n\n"); mutex.ReleaseMutex(); }
private static void timer_SOAP(object stateInfo) { mutex.WaitOne(); Console.WriteLine("#######################SOAP########################"); Provider provider = (Provider)stateInfo; Random random = new Random(); XmlDocument doc = new XmlDocument(); XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null); doc.AppendChild(dec); Location location = null; foreach (LocationExcel le in locationCampus) { if (le.parkingID.Equals(provider.parkInfoID)) { location = le.giveLocation(random.Next(0, provider.parkInfoNumberOfSpots)); } } if (location == null) { Console.WriteLine("Erro try to get spot location from " + provider.parkInfoGeoLocationFile); Console.WriteLine("######################END-SOAP#####################\n\n"); return; } string xmlString = ""; try { xmlString = dynamicWebServiceCall(provider.endpoint, "GetSensorDataString", location.name).ToString(); } catch (Exception e) { Console.WriteLine("Fail to comunicate wich " + provider.endpoint); Console.WriteLine("######################END-SOAP#####################\n\n"); return; } doc.LoadXml(xmlString); XmlNode locationNode = doc.SelectSingleNode("//location"); locationNode.InnerXml = location.ToXML(doc).InnerXml; Console.WriteLine(FunctionHelper.formatXmlToUnminifierString(doc)); Console.WriteLine("Sending information..."); Mosquitto.publishMosquitto(mClient, new string[] { "ParkDACE\\all", "ParkDACE\\" + provider.parkInfoID }, doc.OuterXml); Console.WriteLine("######################END-SOAP#####################\n\n"); mutex.ReleaseMutex(); }
public static void ComputeResponse(string str) { mutex.WaitOne(); Console.WriteLine("########################DLL########################"); string[] strs = str.Split(';'); //string[] ids = { "ParkID", "SpotID", "Timestamp", "ParkingSpotStatus", "BatteryStatus" }; XmlDocument doc = new XmlDocument(); string xmlString = CreateXMLSpot(strs[0], strs[1], strs[3], strs[2], strs[4]); doc.LoadXml(xmlString); Console.WriteLine(FunctionHelper.formatXmlToUnminifierString(doc)); Console.WriteLine("Sending information..."); Mosquitto.publishMosquitto(mClient, new string[] { "ParkDACE\\all", "ParkDACE\\" + strs[0] }, doc.OuterXml); Console.WriteLine("######################END-DLL######################\n\n"); mutex.ReleaseMutex(); }
private static void TryReconnectMClientPark(object sender, EventArgs e) { mutexReconnect.WaitOne(); if (mClientPark == null || !mClientPark.IsConnected) { Console.WriteLine("##############Try to reconnect mClientPark#############"); mClientPark = Mosquitto.connectMosquittoGuaranteeThatTryToConnect(ipsParkDACE); if (mClientPark == null || !mClientPark.IsConnected) { System.Environment.Exit(1); } mClientPark.ConnectionClosed += TryReconnectMClientPark; Mosquitto.configFunctionMosquitto(mClientPark, mClientPark_MqttMsgPublishReceived); Mosquitto.subscribedMosquitto(mClientPark, topicsParkDACE[0]); } mutexReconnect.ReleaseMutex(); mutex.ReleaseMutex(); }
static void Main(string[] args) { Console.WriteLine("#################################################################################"); Console.WriteLine("################################### INIT ####################################"); Console.WriteLine("#################################################################################\n\n"); parkingsNameSubscribed = new List <string>(); Console.WriteLine("#####################MOSQUITTO#####################"); Console.WriteLine("####Connect to the topic " + topicsParkDACE[0] + "####"); mClientPark = Mosquitto.connectMosquittoGuaranteeThatTryToConnect(ipsParkDACE); if (mClientPark == null || !mClientPark.IsConnected) { return; } mClientPark.ConnectionClosed += TryReconnectMClientPark; Console.WriteLine("####Connect to the other topics ####"); mClient = Mosquitto.connectMosquittoGuaranteeThatTryToConnect(ipsParkDACE); if (mClient == null || !mClient.IsConnected) { return; } mClient.ConnectionClosed += TryReconnectMClient; Console.WriteLine("#####################END-Connection##################\n"); String topicsSubscribe = ""; Console.WriteLine("#######Config the mClientPark on topic " + topicsParkDACE[0] + "#######"); Mosquitto.configFunctionMosquitto(mClientPark, mClientPark_MqttMsgPublishReceived); topicsSubscribe += "\n\t\t\t-'" + topicsParkDACE[0] + "'"; Console.WriteLine("#####################END-Config##################\n"); Console.WriteLine("#######Config the mClient on new topics#######"); Mosquitto.configFunctionMosquitto(mClient, mClient_MqttMsgPublishReceived); Console.WriteLine("#####################END-Config##################\n"); Console.WriteLine("You will be subscribe to the topic:" + topicsSubscribe); Console.WriteLine("#################END-Config-MOSQUITTO###############\n"); Console.WriteLine("\n\n\n#################################################################################"); Console.WriteLine("########################### Starting Application ############################"); Console.WriteLine("#################################################################################\n\n"); Mosquitto.subscribedMosquitto(mClientPark, topicsParkDACE[0]); mutexReconnect.ReleaseMutex(); mutex.ReleaseMutex(); }
private static void TryReconnect(object sender, EventArgs e) { if (mClient == null || !mClient.IsConnected) { Console.WriteLine("#####################MOSQUITTO#####################"); mClient = Mosquitto.connectMosquittoGuaranteeThatTryToConnect(ips); if (mClient == null || !mClient.IsConnected) { return; } mClient.ConnectionClosed += TryReconnect; Console.WriteLine("###################END-MOSQUITTO###################\n"); } if (mClient == null || !mClient.IsConnected) { return; } mutex.ReleaseMutex(); }
private static void TryReconnectMClient(object sender, EventArgs e) { mutexReconnect.WaitOne(); if (mClient == null || !mClient.IsConnected) { Console.WriteLine("##############Try to reconnect mClient#############"); mClient = Mosquitto.connectMosquittoGuaranteeThatTryToConnect(ipsParkDACE); if (mClient == null || !mClient.IsConnected) { System.Environment.Exit(1); } mClient.ConnectionClosed += TryReconnectMClient; Mosquitto.configFunctionMosquitto(mClient, mClient_MqttMsgPublishReceived); foreach (String parkingInformation in parkingsNameSubscribed) { Mosquitto.subscribedMosquitto(mClient, topicsParkDACE[0] + "" + parkingInformation); } } mutexReconnect.ReleaseMutex(); mutex.ReleaseMutex(); }
public Func <string, string, dynamic> this[string topic] { get { if (!handlers.ContainsKey(topic)) { return(null); } return(handlers[topic]); } set { if (value == null) { handlers.Remove(topic); Mosquitto.Unubscribe(topic); } else if (!handlers.ContainsKey(topic)) { Mosquitto.Subscribe(topic); handlers[topic] = value; } } }
static void Main(string[] args) { Console.WriteLine("#################################################################################"); Console.WriteLine("################################### INIT ####################################"); Console.WriteLine("#################################################################################\n\n"); providers = new List <Provider>(); locationCampus = new List <LocationExcel>(); timers = new List <Timer>(); Console.WriteLine("######################SETTINGS#####################"); if (!FunctionHelper.ValidXMLParkingLocation("ParkingLocation.xml", "ParkingLocation.xsd")) { Console.WriteLine("####################END-SETTINGS###################\n"); Console.WriteLine("Press any key to exit!"); Console.ReadKey(); return; } int time = ReadXMLParkingLocation("ParkingLocation.xml"); if (providers == null || providers.ToArray().Length == 0) { Console.WriteLine("####################END-SETTINGS###################\n"); Console.WriteLine("Press any key to exit!"); Console.ReadKey(); return; } Console.WriteLine("Xml is valid!"); string topicsString = "ParkDACE\\, ParkDACE\\all"; foreach (Provider provider in providers) { Console.WriteLine(""); Console.WriteLine("Connection Type: " + provider.connectionType); Console.WriteLine("Endpoint: " + provider.endpoint); Console.WriteLine("parkInfo: "); Console.WriteLine("\tID: " + provider.parkInfoID); Console.WriteLine("\tDescription: " + provider.parkInfoDescription); Console.WriteLine("\tNumberOfSpots: " + provider.parkInfoNumberOfSpecialSpots); Console.WriteLine("\tOperatingHours: " + provider.parkInfoOperatingHours); Console.WriteLine("\tNumberOfSpecialSpots: " + provider.parkInfoNumberOfSpecialSpots); Console.WriteLine("\tGeoLocationFile: " + provider.parkInfoGeoLocationFile); Console.WriteLine(""); topicsString += ", ParkDACE\\" + provider.parkInfoID; } Console.WriteLine("####################END-SETTINGS###################\n"); Console.WriteLine("#####################MOSQUITTO#####################"); mClient = Mosquitto.connectMosquittoGuaranteeThatTryToConnect(ips); if (mClient == null || !mClient.IsConnected) { Console.WriteLine("###################END-MOSQUITTO###################\n"); Console.WriteLine("Press any key to exit!"); Console.ReadKey(); return; } mClient.ConnectionClosed += TryReconnect; Console.WriteLine("Topics that will be send data " + topicsString + "!"); Console.WriteLine("###################END-MOSQUITTO###################\n"); Console.WriteLine("\n\n\n#################################################################################"); Console.WriteLine("########################### Starting Application ############################"); Console.WriteLine("#################################################################################\n\n"); foreach (Provider provider in providers) { locationCampus.Add(new LocationExcel(provider.parkInfoGeoLocationFile)); if (provider.connectionType.Equals("DLL") || provider.endpoint.Equals("ParkingSensorNodeDll")) { ParkingSensorNodeDll.ParkingSensorNodeDll dll = new ParkingSensorNodeDll.ParkingSensorNodeDll(); dll.Initialize(ComputeResponse, time); } else if (provider.connectionType.Equals("SOAP")) { timers.Add(new Timer(new TimerCallback(timer_SOAP), provider, 1, time)); } } timerParks = new Timer(new TimerCallback(timer_park_information_and_update), providers, 1, time); mutex.ReleaseMutex(); }
public static void mClientPark_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) //Recebe tudo independentement que park pretence { mutex.WaitOne(); Console.WriteLine("#######################New Park########################################"); Console.WriteLine("mClientPark-->> Topic: " + e.Topic); List <ParkingInformation> parkingsInformationsLocal = new List <ParkingInformation>(); List <string> parkingsNameLocal = new List <string>(); XmlDocument doc = new XmlDocument(); doc.LoadXml(Encoding.UTF8.GetString(e.Message)); if (!FunctionHelper.ValidXML(doc, "ParkInformation.xsd")) { Console.WriteLine("##############################END New Park#################################"); mutex.ReleaseMutex(); return; } Console.WriteLine("XML is valid!"); Boolean newTopics = false; foreach (XmlNode parkingInformationNode in doc.SelectNodes("/list/parkingInformation")) { ParkingInformation parkingInformation = new ParkingInformation(parkingInformationNode.OuterXml); parkingsInformationsLocal.Add(parkingInformation); if (parkingsNameSubscribed.Count == 0 || !parkingsNameSubscribed.Exists(topicList => topicList.Equals(parkingInformation.id))) { Console.Write(newTopics?"": "New topics subscribed: \n"); newTopics = true; string topic = topicsParkDACE[0] + "" + parkingInformation.id; Console.WriteLine("\t\t|" + topic); parkingsNameSubscribed.Add(parkingInformation.id); Mosquitto.subscribedMosquitto(mClient, topic); } } Console.WriteLine(); //Verificar e unsubscribe os que já não existem if (parkingsNameSubscribed.Count > 0) { List <string> auxList = parkingsNameLocal.Except(parkingsNameSubscribed).ToList(); if (auxList.Count > 0) { Console.WriteLine("Old topics Unsubscribed: "); foreach (string aux in auxList) { Console.WriteLine("\t\t|" + topicsParkDACE[0] + "" + aux); Mosquitto.unsubscribeMosquitto(mClient, new string[] { topicsParkDACE[0] + "" + aux }); parkingsNameSubscribed.Remove(aux); } } } /////// Send data to BD string response = ""; foreach (ParkingInformation park in parkingsInformationsLocal) { try { response = DatabaseHelper.newParking(park); } catch (ParkNotInsertedException ex) { response = ex.Message; } Console.WriteLine("\t\t\t" + park.id + ":" + response); } Console.WriteLine("##############################END New Park#################################"); mutex.ReleaseMutex(); }