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); }
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); } }); }