public void Unsubscribe(MqSite mqSite) { if (Sites.Remove(mqSite) && status == Status.Connected) { var msg = new MqUnsubscribe(); msg.Add(mqSite.remotePath); Send(msg); } }
public void Subscribe(MqSite ms) { if (status == Status.Connected) { var msg = new MqSubscribe(); msg.Add(ms.remotePath, QoS.AtMostOnce); Send(msg); } }
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)); } }