示例#1
0
        public static IUnityContainer AddLocalConnectionTable(this IUnityContainer services)
        {
            //use default
            var redistributableOption = new RedistributableTableOption();
            var searchTableOption     = new UdpConnectionOption {
                Address = IPAddress.Any, Port = 33100
            };
            var table    = new RedistLocalConnectionTable(searchTableOption, redistributableOption);
            var settings = services.Resolve <RadioSettings>();

            var localEp          = new IPEndPoint(settings.LocalIp, searchTableOption.Port);
            var notificationData = new NotificationData {
                Id = settings.NetworkToken, Endpoint = localEp
            };

            table.Register(notificationData);
            services.RegisterInstance <IRedistributableLocalConnectionTable>(table, new SingletonLifetimeManager());

            return(services);
        }
示例#2
0
        public RedistLocalConnectionTable(UdpConnectionOption options, RedistributableTableOption tableOption)
        {
            OnConnected    += delegate { };
            OnDisconnected += delegate { };
            InitializeListener(options);
            _registrator = new RedistLocalConnectionTableRegistrator(options.Port, tableOption.NotifyTime);
            _timer       = new AsyncLoopTimer(tableOption.LoopTime, () =>
            {
                foreach (var value in _table)
                {
                    if (DateTime.UtcNow.TimeOfDay.Subtract(value.Value.TimeStamp) <= tableOption.ExpirationTime)
                    {
                        continue;
                    }

                    _table.TryRemove(value.Key, out var info);
                    var args = new ConnectionArgs(info.Data);
                    OnDisconnected?.Invoke(this, args);
                }
            });
        }