Beispiel #1
0
 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> ();
 }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
    /// <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
                      } }
                });
            }
        }
    }
Beispiel #5
0
 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);
         }
     }
 }
Beispiel #6
0
        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;
            }
        }
Beispiel #7
0
 public Client()
 {
     service_cache   = new ServiceCache(this);
     notify_listener = new NotifyListener(this);
     browsers        = new Dictionary <string, Browser> ();
 }
Beispiel #8
0
 public void RemoveListener(NotifyListener listener)
 {
     Event -= listener;
 }
Beispiel #9
0
 public void AddListener(NotifyListener listener)
 {
     Event -= listener;//预防重复监听
     Event += listener;
 }
Beispiel #10
0
 public Notify(NotifyListener listener)
 {
     AddListener(listener);
 }