Пример #1
0
        public static MQTTid Init(string remoteAddr, int remotePort,
                                  /*Action<string,bool,System.Diagnostics.EventLogEntryType> logMessage,*/
                                  Action <string, MQTTMsgPublishEventArgs> onNewMessage,
                                  Action <string, bool, System.Diagnostics.EventLogEntryType> logMessage
                                  )
        {
            //First get client to remote if not exists new is created
            MqttClient remoteClient        = MQTTController.getConnectionTORemoteBroker(remoteAddr, remotePort);
            string     connectedSoftwareId = MQTTController.getClientIdInternal();

            //Assign This client to this remote software
            lock (MQTTController.clientStuffLock) {
                if (MQTTController.clientsActiveConnections.ContainsKey(connectedSoftwareId))   //Not First Connection
                {
                    mqttClientData onMememory = MQTTController.clientsActiveConnections[connectedSoftwareId].First(cdata => cdata.client.Equals(remoteClient));
                    if (onMememory == null) // Not Connected to this broker
                    {
                        MQTTController.clientsActiveConnections[connectedSoftwareId].Add(new mqttClientData(remoteClient, onNewMessage, logMessage));
                    }
                }
                else     //FirstConnection
                {
                    MQTTController.clientsActiveConnections.Add(connectedSoftwareId, new List <mqttClientData>());
                    MQTTController.clientsActiveConnections[connectedSoftwareId].Add(new mqttClientData(remoteClient, onNewMessage, logMessage));
                }
            }
            return(new MQTTid(remoteAddr, remotePort));
        }
Пример #2
0
        private static Dictionary <string, mqttClientData> getWhoisUsing(string remoteAddr, int remotePort)
        {
            Dictionary <string, mqttClientData> returnData = new Dictionary <string, mqttClientData>();

            foreach (KeyValuePair <string, List <mqttClientData> > connectedClient in MQTTController.clientsActiveConnections)
            {
                mqttClientData usingBroker = connectedClient.Value.Find(clientData => clientData.client.remoteAddress.Equals(remoteAddr) && clientData.client.remotePort == remotePort);
                if (usingBroker != null)
                {
                    returnData.Add(connectedClient.Key, usingBroker);
                }
            }
            return(returnData);
        }
Пример #3
0
        public static int Disconnect(MQTTid brokerID)
        {
            if (brokerID == null)
            {
                return(-1);
            }
            string connectedSoftwareId = MQTTController.getClientIdInternal();

            lock (MQTTController.clientStuffLock) {
                if (MQTTController.clientsActiveConnections.ContainsKey(connectedSoftwareId))   //Connected to somewhere
                {
                    mqttClientData onMemory = MQTTController.clientsActiveConnections[connectedSoftwareId].First(cdata => cdata.client.remoteAddress.Equals(brokerID.brokerADDR) && cdata.client.remotePort == brokerID.brokerPort);
                    if (onMemory != null)                                                              //  Connected to this broker
                    {
                        MQTTController.clientsActiveConnections[connectedSoftwareId].Remove(onMemory); // remove this cleint reference to the broker

                        Dictionary <string, mqttClientData> everyBodyUsisngBroker = MQTTController.getWhoisUsing(brokerID.brokerADDR, brokerID.brokerPort);
                        //List<mqttClientData> everyBodyUsisngBroker= MQTTController.clientsActiveConnections[connectedSoftwareId].FindAll(cdata => cdata.client.remoteAddress.Equals(remoteAddr) && cdata.client.remotePort == remotePort);
                        //Disconect if nobody is using this broker
                        if (everyBodyUsisngBroker == null || everyBodyUsisngBroker.Count == 0)
                        {
                            onMemory.client.disconnectToRemoteAsync();
                            lock (MQTTController.brokerStuffLock) {
                                string remoteBrokerID = MQTTController.idsToClients.First(x => x.Value.Equals(onMemory.client)).Key;
                                MQTTController.idsToClients.Remove(remoteBrokerID);
                            }
                        }
                        else     //somebodyelse is using thes connection
                        //remove all the subscriptions from this client if nobody is using them
                        {
                            foreach (string subscriptionToBroker in onMemory.getsubscribedTopics())
                            {
                                MQTTController.UnSubscribe(onMemory.client, subscriptionToBroker, 0, everyBodyUsisngBroker);
                            }
                        }
                    }
                }
                else     //notConnected
                //Nothing
                {
                }
            }
            return(0);
        }
Пример #4
0
        public static bool Connected(MQTTid brokerID)
        {
            if (brokerID == null)
            {
                throw new ArgumentNullException("brokerID cannot be null");
            }
            mqttClientData onMemory            = null;
            string         connectedSoftwareId = MQTTController.getClientIdInternal();

            lock (MQTTController.clientStuffLock) {
                if (MQTTController.clientsActiveConnections.ContainsKey(connectedSoftwareId))   //Connected to somewhere
                {
                    onMemory = MQTTController.clientsActiveConnections[connectedSoftwareId].First(cdata => cdata.client.remoteAddress.Equals(brokerID.brokerADDR) && cdata.client.remotePort == brokerID.brokerPort);
                }
            }
            if (onMemory == null)  //I'm connected to this broker
            {
                return(false);
            }
            return(onMemory.client.connected());
        }
Пример #5
0
        public static int Publish(MQTTid brokerID, string topic, string data, byte QOSLevel, bool retain)
        {
            if (brokerID == null)
            {
                return(-1);
            }
            mqttClientData onMemory            = null;
            string         connectedSoftwareId = MQTTController.getClientIdInternal();

            lock (MQTTController.clientStuffLock) {
                if (MQTTController.clientsActiveConnections.ContainsKey(connectedSoftwareId))   //Connected to somewhere
                {
                    onMemory = MQTTController.clientsActiveConnections[connectedSoftwareId].First(cdata => cdata.client.remoteAddress.Equals(brokerID.brokerADDR) && cdata.client.remotePort == brokerID.brokerPort);
                }
            }
            if (onMemory != null)  //I'm connected to this broker
            {
                return(onMemory.client.publishOnRemote(topic, data, QOSLevel, retain));
            }
            return(-2);
        }
Пример #6
0
        public static int UnSubscribe(MQTTid brokerID, string topic)
        {
            if (brokerID == null)
            {
                return(-1);
            }
            string connectedSoftwareId = MQTTController.getClientIdInternal();
            Dictionary <string, mqttClientData> everyBodyUsisngBroker = MQTTController.getWhoisUsing(brokerID.brokerADDR, brokerID.brokerPort);

            lock (MQTTController.clientStuffLock) {
                if (MQTTController.clientsActiveConnections.ContainsKey(connectedSoftwareId))    //Connected to somewhere
                {
                    mqttClientData onMemory = MQTTController.clientsActiveConnections[connectedSoftwareId].First(cdata => cdata.client.remoteAddress.Equals(brokerID.brokerADDR) && cdata.client.remotePort == brokerID.brokerPort);
                    if (onMemory != null)
                    {
                        MQTTController.UnSubscribe(onMemory.client, topic, 1, everyBodyUsisngBroker);
                    }
                }
            }
            return(0);
        }
Пример #7
0
        public static string GetData(MQTTid brokerID, string topic, byte QOSLevel)
        {
            if (brokerID == null)
            {
                throw new ArgumentNullException("brokerID cannot be null");
            }
            MQTTController.Subscribe(brokerID, topic, QOSLevel);
            mqttClientData onMemory            = null;
            string         connectedSoftwareId = MQTTController.getClientIdInternal();

            lock (MQTTController.clientStuffLock) {
                if (MQTTController.clientsActiveConnections.ContainsKey(connectedSoftwareId))   //Connected to somewhere
                {
                    onMemory = MQTTController.clientsActiveConnections[connectedSoftwareId].First(cdata => cdata.client.remoteAddress.Equals(brokerID.brokerADDR) && cdata.client.remotePort == brokerID.brokerPort);
                }
            }
            if (onMemory != null)  //I'm connected to this broker
            {
                return(onMemory.getData(topic));
            }
            return(null);
        }