Example #1
0
 public void Unsubscribe(MqSite mqSite)
 {
     if (Sites.Remove(mqSite) && status == Status.Connected)
     {
         var msg = new MqUnsubscribe();
         msg.Add(mqSite.remotePath);
         Send(msg);
     }
 }
Example #2
0
 public void Subscribe(MqSite ms)
 {
     if (status == Status.Connected)
     {
         var msg = new MqSubscribe();
         msg.Add(ms.remotePath, QoS.AtMostOnce);
         Send(msg);
     }
 }
Example #3
0
        private void SubFunc(Perform p, SubRec sr)
        {
            if (p.art == Perform.Art.create)
            {
                return;
            }
            MqSite   ms = _sites.FirstOrDefault(z => z.Owner == p.src);
            MqClient client;

            if (ms != null)
            {
                ms.Dispose();
                _sites.Remove(ms);
            }
            if (p.art == Perform.Art.changedField || p.art == Perform.Art.subscribe)
            {
                var uri = p.src.GetField("MQTT.uri").Value as string;
                if (string.IsNullOrEmpty(uri))
                {
                    return;
                }
                Uri uUri;
                try {
                    uUri = new Uri(uri, UriKind.Absolute);
                }
                catch (Exception ex) {
                    Log.Warning("{0}.MQTT.uri = {1} - {2}", p.src.path, uri, ex.Message);
                    return;
                }
                string uName, uPass;
                if (!string.IsNullOrEmpty(uUri.UserInfo))
                {
                    var uia = uUri.UserInfo.Split(':');
                    uName = uia[0];
                    uPass = uia.Length > 1 ? uia[1] : null;
                }
                else
                {
                    uName = null;
                    uPass = null;
                }
                var cid = "MQTT://" + (uName == null ? string.Empty : (uName + "@")) + uUri.DnsSafeHost + (uUri.IsDefaultPort ? string.Empty : (":" + uUri.Port.ToString()));
                client = _clients.FirstOrDefault(z => z.Signature == cid);
                if (client == null)
                {
                    client = new MqClient(this, uUri.DnsSafeHost, uUri.IsDefaultPort?1883:uUri.Port, uName, uPass);
                    _clients.Add(client);
                }
                _sites.Add(new MqSite(this, client, p.src, uUri));
            }
        }