public Client(NetworkInterface networkInterface) { network_interface_info = NetworkInterfaceInfo.GetNetworkInterfaceInfo(networkInterface); service_cache = new ServiceCache(this); notify_listener = new NotifyListener(this); browsers = new Dictionary <string, Browser> (); }
public void HostLocalService() { ServiceHost svc = null; NotifyListener nvc = new NotifyListener(); Uri httpBaseAddress = new Uri("http://localhost:6789/NotificationListener"); svc = new ServiceHost(nvc, httpBaseAddress); svc.Open(); }
public ServiceInvokerBase(IRegistery registery, string groupPath, ILoadBalance loadBalance, IWeightCalculator <ServiceMetadata> weightCalculator) { _serviceIdentity = typeof(TService).Name; _loadBalance = loadBalance; _weightCalculator = weightCalculator; _groupPath = groupPath; _listener = new NotifyListener(); _listener.OnMetadataChanged += (metas) => _metadatas = metas; _registery = registery; _registery.Subscribe(_groupPath, _listener, true); }
/// <summary> /// 消息订阅。订阅者不需要额外对消息进行判空,发布消息时已做非空处理。 /// </summary> /// <param name="msgType">消息类型</param> /// <param name="listener">订阅者</param> /// <param name="owner">订阅者拥有人</param> public static void AddListener(string msgType, NotifyListener listener, object owner = null) { if (!Instance) { return; } if (Instance.notifies.TryGetValue(msgType, out Notify find)) { find.AddListener(listener); } else { Instance.notifies.Add(msgType, new Notify(listener)); } object target = owner ?? listener.Target; if (target != null) { if (Instance.notifiesWithOwner.TryGetValue(target, out var dict)) { if (dict.TryGetValue(msgType, out var set)) { if (!set.Contains(listener)) { set.Add(listener); } } else { dict.Add(msgType, new HashSet <NotifyListener>() { listener }); } } else { Instance.notifiesWithOwner.Add(target, new Dictionary <string, HashSet <NotifyListener> >() { { msgType, new HashSet <NotifyListener>() { listener } } }); } } }
public static void RemoveListener(string msgType, NotifyListener listener) { if (!Instance) { return; } if (Instance.notifies.TryGetValue(msgType, out Notify find)) { find.RemoveListener(listener); } if (Instance.notifiesWithOwner.TryGetValue(listener.Target, out var dict)) { if (dict.TryGetValue(msgType, out var list)) { list.Remove(listener); } } }
public void Dispose() { lock (mutex) { if (disposed) { return; } notify_listener.Stop(); foreach (Browser browser in browsers.Values) { browser.Dispose(); } browsers.Clear(); service_cache.Dispose(); service_cache = null; notify_listener = null; browsers = null; disposed = true; } }
public Client() { service_cache = new ServiceCache(this); notify_listener = new NotifyListener(this); browsers = new Dictionary <string, Browser> (); }
public void RemoveListener(NotifyListener listener) { Event -= listener; }
public void AddListener(NotifyListener listener) { Event -= listener;//预防重复监听 Event += listener; }
public Notify(NotifyListener listener) { AddListener(listener); }