示例#1
0
 public RestTemplate(
     IHttpClientFactory httpClientFactory,
     ServiceDiscovery serviceDiscovery
     ) : base(httpClientFactory)
 {
     _serviceDiscovery = serviceDiscovery;
 }
        /// <summary>
        /// Uses DNS-SD to find all Factory Orchestrator services on your local network.
        /// </summary>
        /// <param name="secondsToWait">Number of seconds to wait for services to respond</param>
        /// <param name="serverIdentity">The service certificate identity to use</param>
        /// <param name="certhash">The service certificate hash to use</param>
        /// <returns>List of FactoryOrchestratorClient representing all discovered clients</returns>
        public static List <FactoryOrchestratorClient> DiscoverFactoryOrchestratorDevices(int secondsToWait = 5, string serverIdentity = "FactoryServer", string certhash = "E8BF0011168803E6F4AF15C9AFE8C9C12F368C8F")
        {
            List <FactoryOrchestratorClient> clients = new List <FactoryOrchestratorClient>();

            using (var sd = new ServiceDiscovery())
            {
                sd.ServiceInstanceDiscovered += ((s, e) =>
                {
                    foreach (var srv in e.Message.AdditionalRecords.Union(e.Message.Answers).OfType <SRVRecord>().Where(x => x.CanonicalName.EndsWith("_factorch._tcp.local", StringComparison.InvariantCultureIgnoreCase)).Distinct())
                    {
                        var port = srv.Port;
                        foreach (var ip in e.Message.AdditionalRecords.Union(e.Message.Answers).OfType <ARecord>())
                        {
                            var client = new FactoryOrchestratorClient(ip.Address, port, serverIdentity, certhash);
                            client.HostName = ip.CanonicalName.Replace(".factorch.local", "");
                            var osVer = e.Message.AdditionalRecords.Union(e.Message.Answers).OfType <TXTRecord>().SelectMany(x => x.Strings).Where(x => x.StartsWith("OSVersion=", StringComparison.InvariantCultureIgnoreCase)).DefaultIfEmpty(string.Empty).FirstOrDefault().Replace("OSVersion=", "");
                            client.OSVersion = osVer;
                            clients.Add(client);
                        }
                    }
                });

                sd.QueryServiceInstances("_factorch._tcp");

                Thread.Sleep(secondsToWait * 1000);
            }
            return(clients);
        }
        public async Task <ServiceNodeInfo> GetNextNode(string serviceName, string serviceRoute, IReadOnlyList <object> serviceArgs, IReadOnlyDictionary <string, string> serviceMeta)
        {
            var nodes = await ServiceDiscovery.GetServiceNodes(serviceName);

            if (!nodes.Any())
            {
                throw new NotFoundNodeException(serviceName);
            }
            if (nodes.Count == 1)
            {
                return(nodes.First());
            }
            lock (LockObject)
            {
                var index = -1;
                var total = 0;
                for (var i = 0; i < nodes.Count; i++)
                {
                    nodes[i].Attach.AddOrUpdate(Key, nodes[i].Weight, (key, old) => Convert.ToInt32(old) + nodes[i].Weight);
                    total += nodes[i].Weight;
                    if (index == -1 || GetCurrentWeightValue(nodes[index]) < GetCurrentWeightValue(nodes[i]))
                    {
                        index = i;
                    }
                }
                nodes[index].Attach.AddOrUpdate(Key, -total, (k, old) => Convert.ToInt32(old) - total);
                var node = nodes[index];
                if (Logger.IsEnabled(LogLevel.Trace))
                {
                    Logger.LogTrace($"Load to node {node.ServiceId}.");
                }
                return(node);
            }
        }
示例#4
0
        public async Task Start_Should_NotRegister_When_RegisterMDNSsIsFalse()
        {
            var serverName = _fixture.Create <string>();

            _option.RegistermDNS = false;
            _option.ServerName   = serverName;

            var host = new MDnsRegisterHostedService(_server, _option, _things, _logger);
            await host.StartAsync(CancellationToken.None);

            using var discovery          = new ServiceDiscovery();
            discovery.ServiceDiscovered += (sender, name) =>
            {
                name.Labels.Contains(serverName).Should().BeFalse();
            };

            discovery.ServiceInstanceDiscovered += (sender, args) =>
            {
                args.ServiceInstanceName.Labels.Contains(serverName).Should().BeFalse();
            };

            await Task.Delay(TimeSpan.FromSeconds(5));

            await host.StopAsync(CancellationToken.None);
        }
示例#5
0
        private void Discover()
        {
            ServiceDiscovery sd = new ServiceDiscovery(mdns);

            mdns.NetworkInterfaceDiscovered += (s, e) =>
            {
                foreach (var networkInterface in e.NetworkInterfaces)
                {
                    logger.Info($"Network-Interface: '{networkInterface.Name}' found");
                }
            };

            sd.ServiceDiscovered         += Sd_ServiceDiscovered;
            sd.ServiceInstanceDiscovered += Sd_ServiceInstanceDiscovered;
            sd.ServiceInstanceShutdown   += Sd_ServiceInstanceShutdown;

            try
            {
                mdns.Start();

                cancellationToken = new CancellationTokenSource();
                while (!cancellationToken.IsCancellationRequested)
                {
                    sd.QueryAllServices();
                    Thread.Sleep(DISCOVER_THREAD_DELAY);
                }
            }
            finally
            {
                sd.Dispose();
                mdns.Stop();
            }
        }
示例#6
0
 public async Task StopAsync(CancellationToken cancellationToken)
 {
     if (!UraganoSettings.IsDevelopment)
     {
         await ServiceDiscovery.DeregisterAsync(UraganoSettings.ServiceDiscoveryClientConfiguration, UraganoSettings.ServiceRegisterConfiguration.Id, cancellationToken);
     }
 }
示例#7
0
        public Task <bool> Start()
        {
            _multicastService = new MulticastService();
            _serviceDiscovery = new ServiceDiscovery();

            _multicastService.NetworkInterfaceDiscovered += (sender, args) =>
            {
                _serviceDiscovery.QueryAllServices();
            };
            _serviceDiscovery.ServiceDiscovered += (s, serviceName) =>
            {
                _logger.LogInformation($"service '{serviceName}'");

                // Ask for the name of instances of the service.
                _multicastService.SendQuery(serviceName, type: DnsType.PTR);
            };

            _serviceDiscovery.ServiceInstanceDiscovered += (s, e) =>
            {
                _logger.LogInformation($"service instance '{e.ServiceInstanceName}'");

                // Ask for the service instance details.
                _multicastService.SendQuery(e.ServiceInstanceName, type: DnsType.SRV);
            };

            _multicastService.Start();

            return(Task.FromResult(true));
        }
示例#8
0
        /// <inheritdoc />
        public Task StartAsync()
        {
            MulticastService.NetworkInterfaceDiscovered += (s, e) =>
            {
                try
                {
                    var profile   = BuildProfile();
                    var discovery = new ServiceDiscovery(MulticastService);
                    OnServiceDiscovery(discovery);
                    discovery.ServiceInstanceDiscovered += OnServiceInstanceDiscovered;

                    if (Broadcast && profile != null)
                    {
                        log.Debug($"Advertising {profile.FullyQualifiedName}");
                        discovery.Advertise(profile);
                    }

                    // Ask all peers to broadcast discovery info.
                    discovery.QueryServiceInstances(ServiceName);
                }
                catch (Exception ex)
                {
                    log.Debug("Failed to send query", ex);
                    // eat it
                }
            };

            return(Task.CompletedTask);
        }
示例#9
0
 private void LoadExtensions()
 {
     this.version                = this.im.LoadExtension <SoftwareVersion>();
     this.sdisco                 = this.im.LoadExtension <ServiceDiscovery>();
     this.ecapa                  = this.im.LoadExtension <EntityCapabilities>();
     this.ping                   = this.im.LoadExtension <S22.Xmpp.Extensions.Ping>();
     this.attention              = this.im.LoadExtension <Attention>();
     this.time                   = this.im.LoadExtension <EntityTime>();
     this.block                  = this.im.LoadExtension <BlockingCommand>();
     this.pep                    = this.im.LoadExtension <Pep>();
     this.userTune               = this.im.LoadExtension <UserTune>();
     this.userAvatar             = this.im.LoadExtension <UserAvatar>();
     this.userMood               = this.im.LoadExtension <UserMood>();
     this.dataForms              = this.im.LoadExtension <DataForms>();
     this.featureNegotiation     = this.im.LoadExtension <FeatureNegotiation>();
     this.streamInitiation       = this.im.LoadExtension <StreamInitiation>();
     this.siFileTransfer         = this.im.LoadExtension <SIFileTransfer>();
     this.inBandBytestreams      = this.im.LoadExtension <InBandBytestreams>();
     this.userActivity           = this.im.LoadExtension <UserActivity>();
     this.socks5Bytestreams      = this.im.LoadExtension <Socks5Bytestreams>();
     this.FileTransferSettings   = new S22.Xmpp.Client.FileTransferSettings(this.socks5Bytestreams, this.siFileTransfer);
     this.serverIpCheck          = this.im.LoadExtension <ServerIpCheck>();
     this.inBandRegistration     = this.im.LoadExtension <InBandRegistration>();
     this.chatStateNotifications = this.im.LoadExtension <ChatStateNotifications>();
     this.bitsOfBinary           = this.im.LoadExtension <BitsOfBinary>();
 }
示例#10
0
        public async Task <ServiceNodeInfo> GetNextNode(string serviceName, string serviceRoute, IReadOnlyList <object> serviceArgs, IReadOnlyDictionary <string, string> serviceMeta)
        {
            var nodes = await ServiceDiscovery.GetServiceNodes(serviceName);

            if (!nodes.Any())
            {
                throw new NotFoundNodeException(serviceName);
            }
            if (nodes.Count == 1)
            {
                return(nodes.First());
            }
            lock (LockObject)
            {
                _index++;
                if (_index > nodes.Count - 1)
                {
                    _index = 0;
                }
                if (Logger.IsEnabled(LogLevel.Trace))
                {
                    Logger.LogTrace($"Load to node {nodes[_index].ServiceId}.");
                }
                return(nodes[_index]);
            }
        }
示例#11
0
 public async Task StopAsync(CancellationToken cancellationToken)
 {
     if (ServerSettings == null)
     {
         return;
     }
     await ServiceDiscovery.DeregisterAsync();
 }
示例#12
0
        public WledDiscovery(ColorService cs) : base(cs)
        {
            var controlService = cs.ControlService;

            _mDns = controlService.MulticastService;
            _sd   = controlService.ServiceDiscovery;
            _ids  = new List <string>();
        }
示例#13
0
        public MDnsTest(TestHost testHost)
        {
            _host             = testHost;
            _serviceDiscovery = new ServiceDiscovery();

            _serviceDiscovery.ServiceInstanceDiscovered += OnServiceInstanceDiscovered;
            _serviceDiscovery.ServiceDiscovered         += OnServiceDiscovered;
        }
示例#14
0
        private void RegisterService(IAppHost host)
        {
            ServiceDiscovery = Settings.GetDiscoveryClient() ?? new ConsulDiscovery();
            ServiceDiscovery.Register(host);

            // register servicestack discovery services
            host.Register(ServiceDiscovery);
        }
示例#15
0
        /// <summary>Constructor.</summary>
        public ServiceDiscoveryViewModel()
        {
            _serviceDiscovery = new ServiceDiscovery();

            _serviceDiscovery.StatusUpdate += new ServiceDiscovery.ServiceDiscoveryStatusUpdate(OnStatusUpdate);

            CheckEndpointCommand = new RelayCommand(CheckEndpointCommand_Execute, CheckEndpointCommand_CanExecute);
        }
示例#16
0
        public MdnsLookup(Auow workflow)
        {
            Uow  = workflow;
            mdns = new MulticastService();
            mdns.AnswerReceived += Mdns_AnswerReceived;

            sd = new ServiceDiscovery(mdns);
            sd.ServiceInstanceDiscovered += Sd_ServiceInstanceDiscovered;
        }
示例#17
0
        static void Main(string[] args)
        {
            Console.WriteLine("Multicast DNS spike");

            // set logger factory
            var properties = new Common.Logging.Configuration.NameValueCollection
            {
                ["level"]        = "TRACE",
                ["showLogName"]  = "true",
                ["showDateTime"] = "true"
            };

            LogManager.Adapter = new ConsoleOutLoggerFactoryAdapter(properties);

            var mdns = new MulticastService
            {
                NetworkInterfaceDiscoveryInterval = TimeSpan.FromSeconds(1),
            };

            foreach (var a in MulticastService.GetIPAddresses())
            {
                Console.WriteLine($"IP address {a}");
            }

            mdns.QueryReceived += (s, e) =>
            {
                var names = e.Message.Questions
                            .Select(q => q.Name + " " + q.Type);
                Console.WriteLine($"got a query for {String.Join(", ", names)}");
            };
            mdns.AnswerReceived += (s, e) =>
            {
                var names = e.Message.Answers
                            .Select(q => q.Name + " " + q.Type)
                            .Distinct();
                Console.WriteLine($"got answer for {String.Join(", ", names)}");
            };
            mdns.NetworkInterfaceDiscovered += (s, e) =>
            {
                foreach (var nic in e.NetworkInterfaces)
                {
                    Console.WriteLine($"discovered NIC '{nic.Name}'");
                }
            };

            var sd = new ServiceDiscovery(mdns);

            sd.Advertise(new ServiceProfile("x1", "_xservice._tcp", 5011));
            sd.Advertise(new ServiceProfile("x2", "_xservice._tcp", 666));
            var z1 = new ServiceProfile("z1", "_zservice.udp", 5012);

            z1.AddProperty("foo", "bar");
            sd.Advertise(z1);

            mdns.Start();
            Console.ReadKey();
        }
示例#18
0
        public static async Task Receive(ReceiveParameters param)
        {
            if (param.deviceName == null)
            {
                param.deviceName = Environment.MachineName;
            }
            try
            {
                using (var socket = new Socket(AddressFamily.InterNetwork,
                                               SocketType.Stream,
                                               ProtocolType.Tcp))
                {
                    using (var sd = new ServiceDiscovery())
                    {
                        var endPoint = new IPEndPoint(IPAddress.Any, 0);
                        socket.Bind(endPoint);
                        var port           = ((IPEndPoint)socket.LocalEndPoint).Port;
                        var serviceProfile = new ServiceProfile(param.deviceName, ADropDomainName, (ushort)port);
                        sd.Advertise(serviceProfile);
                        socket.Listen(1);
                        var incoming = socket.Accept();
                        Console.WriteLine($"{incoming.RemoteEndPoint} connect, receiving metadata.");
                        using (var receiver = new Receiver(incoming))
                        {
                            var meta = receiver.ReadMetadata();
                            Console.WriteLine($"MetaInfo: {meta.FileInfos.Count()} files with type:\n{meta.FileInfos}");

                            receiver.SendAction(Proto.Action.Types.ActionType.Accepted);

                            for (int i = 0; i < meta.FileInfos.Count(); i++)
                            {
                                var mimeType = meta.FileInfos[i].FileType;
                                var result   = await receiver.ReadFile();

                                if (mimeType == "text/plain")
                                {
                                    Console.WriteLine($"received text: \n{Encoding.UTF8.GetString(result)}");
                                }
                                else
                                {
                                    var extension = MimeTypes.MimeTypeMap.GetExtension(mimeType) ?? ".dat";
                                    File.WriteAllBytes($"{i}{extension}", result);
                                }
                            }
                        }
                    }
                    return;
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine(e);
            }

            return;
        }
        private void RegisterService(IAppHost host)
        {
            ServiceDiscovery = Settings.GetDiscoveryClient() ?? new ConsulDiscovery();
            ServiceDiscovery.Register(host);

            // register servicestack discovery services
            host.Register(ServiceDiscovery);
            host.GetContainer()
            .Register <IServiceGatewayFactory>(x => new ConsulServiceGatewayFactory(Settings.GetGateway(), ServiceDiscovery))
            .ReusedWithin(ReuseScope.None);
        }
示例#20
0
        private static void RunServer()
        {
            var service = "_appletv.local.appletv._local.appletv.local.appletv.local";
            var mdns    = new MulticastService();

            mdns.QueryReceived += (s, e) =>
            {
                var msg = e.Message;
                if (msg.Questions.Any(q => q.Name == service))
                {
                    var res       = msg.CreateResponse();
                    var addresses = MulticastService.GetIPAddresses()
                                    .Where(ip => ip.AddressFamily == AddressFamily.InterNetwork);
                    foreach (var address in addresses)
                    {
                        var ar = new ARecord
                        {
                            Name    = service,
                            Address = address
                        };
                        var writer = new PresentationWriter(new StringWriter());
                        writer.WriteString("123qweq");
                        ar.WriteData(writer);
                        ar.Name = "qweqeqweq";
                        res.Answers.Add(ar);
                    }
                    mdns.SendAnswer(res);
                }
            };
            advertiseThread = new Thread(new ThreadStart(() =>
            {
                sd     = new ServiceDiscovery(mdns);
                var sp = new ServiceProfile("_itxpt_multicast._tcp.", "_itxpt._tcp", 5353, new List <IPAddress> {
                    IPAddress.Parse("192.168.88.239")
                });
                //sp.AddProperty("host", "192.168.88.239");
                //sp.AddProperty("port", "14005");
                sp.Resources.Add(new ARecord {
                    Name = "_itxpt_multicast._tcp.", Address = IPAddress.Parse("192.168.88.239"), Class = DnsClass.ANY
                });
                sp.Resources.Add(new SRVRecord {
                    Name = "_itxpt_multicast._tcp.", Port = 5353, Priority = 0, Weight = 0, Class = DnsClass.ANY
                });
                sp.Resources.Add(new PTRRecord {
                    Name = "_itxpt_multicast._tcp.", DomainName = "192.168.88.239"
                });
                sd.Advertise(sp);
            }));
            advertiseThread.Start();

            mdns.Start();
        }
示例#21
0
        public int StartRunning() {
            if (!IsMaster) return int.MinValue;

            // 启用了服务发现的情况下, 检查是否有其他的Master存在
            if (ServiceDiscovery.Instance != null) {
                var discover_name = ServiceDiscovery.GetDiscoverName(GetNameKey());
                var task_checkstate = ServiceDiscovery.Instance.GetSchedServiceState(discover_name);
                Task.WaitAll(task_checkstate);
                var master_state = task_checkstate.Result;
                if (master_state != null) {
                    Console.WriteLine($"Error : master already exist ({Prefix}).");
                    return int.MinValue;
                }
            }

            //标记以Master方式运行
            RunningAsMaster = true;

            CreateContext().RecordAlive().Wait();

            var time_start = PerformStartTime.Add(Math.Ceiling((DateTime.UtcNow - PerformStartTime).TotalMilliseconds /
                                                               Interval.TotalMilliseconds) * Interval);
            var offset_start = time_start - DateTime.UtcNow;

            Timer = new Timer(async t => {
                var ctx = CreateContext(); // 创建演出上下文
                await ctx.RecordAlive();

                if (!Enabled) return;



                await OnUpdate(ctx);

                if (!await ctx.SetCurrentStatus(PerformContext.Status.Started)) return; // 尝试标记开始, 如果已经开始,退出  
                if (!await ctx.Lock()) return; // 尝试上活锁, 如果加锁失败, 退出

                try {
                    await OnPerform(ctx);
                    await ctx.SetCurrentStatus(PerformContext.Status.Completed); //标记完成 
                } catch (Exception ex) {
                    await ctx.SetCurrentStatus(PerformContext.Status.Error); //标记错误 
                    _logger.LogError($"Sechedule {ctx.CurrRoundKey} Error : {ex.Message}");
                } finally {
                    await ctx.Unlock();
                }

            }, null, offset_start, Interval);

            return offset_start.Seconds;
        }
示例#22
0
        public void TestGetReplicaEndpoint()
        {
            string replicaAddress     = "{\"Endpoints\":{\"ServiceEndpoint\":\"TCP://10.0.0.4:99\",\"ManagementEndpoint\":\"net.tcp://10.0.0.6:61019/ManagementEndpoint\"}}";
            var    serviceEndpoint    = ServiceDiscovery.GetReplicaEndpointUri(replicaAddress, "ServiceEndpoint");
            var    managementEndpoint = ServiceDiscovery.GetReplicaEndpointUri(replicaAddress, "ManagementEndpoint");

            Assert.AreEqual("10.0.0.4", serviceEndpoint.Host);
            Assert.AreEqual(99, serviceEndpoint.Port);
            Assert.AreEqual("/", serviceEndpoint.PathAndQuery);

            Assert.AreEqual("10.0.0.6", managementEndpoint.Host);
            Assert.AreEqual(61019, managementEndpoint.Port);
            Assert.AreEqual("/ManagementEndpoint", managementEndpoint.PathAndQuery);
        }
示例#23
0
        private void AdvertiseService(IPAddress ip)
        {
            var service = new ServiceProfile($"Vent-Test", "_venttest._tcp", 54321, new List <IPAddress>()
            {
                ip
            });

            service.AddProperty("vn", "1.0");
            service.AddProperty("fn", new EasClientDeviceInformation().FriendlyName);
            Debug.WriteLine("Made service profile");
            SD = new ServiceDiscovery();
            Debug.WriteLine("Made ServiceDiscovery");
            SD.Advertise(service);
            Debug.WriteLine("Advertising");
        }
示例#24
0
 public static Dictionary <string, ServiceDiscovery.Resolved> Parse(Configuration.Config config)
 {
     return(config.AsEnumerable()
            .Select(pair => (pair.Key, config.GetConfig(pair.Key)))
            .ToDictionary(pair => pair.Key, pair =>
     {
         var(serviceName, full) = pair;
         var endpoints = full.GetStringList("endpoints");
         var resolvedTargets = endpoints.Select(e =>
         {
             var values = e.Split(':');
             return new ServiceDiscovery.ResolvedTarget(values[0], int.TryParse(values.Skip(1).FirstOrDefault(), out var i) ? i : default(int?));
         }).ToArray();
         return new ServiceDiscovery.Resolved(serviceName, resolvedTargets);
     }));
示例#25
0
        public static void Main(string[] args)
        {
            var serviceDiscovery = new ServiceDiscovery();
            var endpointStrategy = new StickyEndpointStrategy(serviceDiscovery);
            var clientFactory    = new ClientFactory(endpointStrategy);

            var tasks = new Task[3];

            for (var i = 0; i < tasks.Length; ++i)
            {
                tasks[i] = Task.Factory.StartNew(x => RunClientTest(clientFactory), null);
            }

            Console.ReadLine();
        }
示例#26
0
        private void Advertise()
        {
            ServiceDiscovery serviceDiscovery = new ServiceDiscovery(mdns);

            serviceDiscovery.Advertise(serviceProfile);

            mdns.Start();

            lock (locker)
                while (IsRunning)
                {
                    Monitor.Wait(locker);
                }

            serviceDiscovery.Unadvertise(serviceProfile);
        }
示例#27
0
文件: Program.cs 项目: trampster/Ropu
        static async Task Main(string[] args)
        {
            Console.WriteLine("Ropu Serving Node");
            Console.WriteLine("Copyright (c) Daniel Hughes");
            Console.WriteLine();

            var settingsReader = new CommandLineSettingsReader();
            var settings       = settingsReader.ParseArgs(args);

            if (settings == null)
            {
                return;
            }

            var portFinder          = new PortFinder();
            var credentialsProvider = new CredentialsProvider()
            {
                Email    = settings.Email,
                Password = settings.Password
            };
            var webClient        = new RopuWebClient("https://192.168.1.9:5001", credentialsProvider);
            var keysClient       = new KeysClient(webClient, true, encryptionKey => new CachedEncryptionKey(encryptionKey, key => new AesGcmWrapper(key)));
            var packetEncryption = new PacketEncryption(keysClient);

            var mediaProtocol        = new RopuProtocol(portFinder, StartingServingNodePort, packetEncryption, keysClient);
            var loadBalancerProtocol = new LoadBalancerProtocol(portFinder, StartingLoadBalancerPort, packetEncryption, keysClient);
            var serviceDiscovery     = new ServiceDiscovery();

            var groupsClient = new GroupsClient(webClient, new ImageClient(webClient));
            var registra     = new Registra(groupsClient);
            var servingNodes = new ServingNodes(100);
            var groupCallControllerLookup = new GroupCallControllerLookup();

            var servicesClient = new ServicesClient(webClient, ServiceType.ServingNode);

            var servingNodeRunner = new ServingNodeRunner(
                mediaProtocol,
                loadBalancerProtocol,
                serviceDiscovery,
                registra,
                servingNodes,
                groupCallControllerLookup,
                servicesClient,
                keysClient);

            await servingNodeRunner.Run();
        }
        protected override void BuildServiceStubs()
        {
            var queryServicesStub = new LightweightMethodStub <RpcObjectRequest, RpcServicesQueryResponse>(
                "SciTech.Rpc.RpcService.QueryServices",
                (request, _, context) => new ValueTask <RpcServicesQueryResponse>(this.QueryServices(request.Id)),
                this.Serializer, null, false);

            this.AddMethodDef(queryServicesStub);

            if (this.AllowDiscovery)
            {
                var discovery = new ServiceDiscovery(this, this.CreateDefaultSerializer());
                discovery.AddDiscoveryMethods(new MethodBinder(this));
            }

            base.BuildServiceStubs();
        }
示例#29
0
        /// <summary>
        /// Initialize a new instance of <see cref="MDnsRegisterHostedService"/>.
        /// </summary>
        /// <param name="server">The <see cref="IServer"/> with feature.</param>
        /// <param name="options">The <see cref="ThingOption"/>.</param>
        /// <param name="things">All things for in the application. It's use for determinate the server name if isn't set.</param>
        /// <param name="logger">The <see cref="ILogger{TCategoryName}"/></param>
        public MDnsRegisterHostedService(IServer server,
                                         ThingOption options,
                                         IEnumerable <Thing> things,
                                         ILogger <MDnsRegisterHostedService> logger)
        {
            _discovery = new ServiceDiscovery();
            _profiles  = new List <ServiceProfile>();
            _server    = server ?? throw new ArgumentNullException(nameof(server));
            _option    = options;
            _logger    = logger;
            _name      = options.ServerName;

            if (string.IsNullOrEmpty(_name))
            {
                _name = things.First().Name;
            }
        }
示例#30
0
        public async Task Start_Should_Register_When_RegisterMDNSsIsTrueAndHaveTls()
        {
            _option.RegistermDNS = true;
            _option.ServerName   = string.Empty;

            var addresses = new ServerAddressesFeature();

            addresses.Addresses.Add("local:8888");
            _server.Features.Get <IServerAddressesFeature>().Returns(addresses);

            var tls = Substitute.For <ITlsHandshakeFeature>();

            tls.Protocol.Returns(SslProtocols.Tls);
            _server.Features.Get <ITlsHandshakeFeature>().Returns(tls);

            _things.Add(new FakeThing());

            var find = false;

            using var discovery = new ServiceDiscovery();

            discovery.ServiceDiscovered += (sender, name) =>
            {
                if (name.Labels.Contains("Fake"))
                {
                    find = true;
                }
            };

            discovery.ServiceInstanceDiscovered += (sender, args) =>
            {
                if (args.ServiceInstanceName.Labels.Contains("Fake"))
                {
                    find = true;
                }
            };

            var host = new MDnsRegisterHostedService(_server, _option, _things, _logger);
            await host.StartAsync(CancellationToken.None);

            await Task.Delay(TimeSpan.FromSeconds(10));

            find.Should().BeTrue();

            await host.StopAsync(CancellationToken.None);
        }
示例#31
0
        /// <summary>
        /// Initializes the various XMPP extension modules.
        /// </summary>
        private void LoadExtensions()
        {
            version = im.LoadExtension<SoftwareVersion>();
            sdisco = im.LoadExtension<ServiceDiscovery>();
            ecapa = im.LoadExtension<EntityCapabilities>();
            ping = im.LoadExtension<Ping>();
            attention = im.LoadExtension<Attention>();
            time = im.LoadExtension<EntityTime>();
            block = im.LoadExtension<BlockingCommand>();
            pep = im.LoadExtension<Pep>();
            userTune = im.LoadExtension<UserTune>();
#if WINDOWSPLATFORM
            userAvatar = im.LoadExtension<UserAvatar>();
#endif
            userMood = im.LoadExtension<UserMood>();
            dataForms = im.LoadExtension<DataForms>();
            featureNegotiation = im.LoadExtension<FeatureNegotiation>();
            streamInitiation = im.LoadExtension<StreamInitiation>();
            siFileTransfer = im.LoadExtension<SIFileTransfer>();
            inBandBytestreams = im.LoadExtension<InBandBytestreams>();
            userActivity = im.LoadExtension<UserActivity>();
            socks5Bytestreams = im.LoadExtension<Socks5Bytestreams>();
            FileTransferSettings = new FileTransferSettings(socks5Bytestreams,
                siFileTransfer);
            serverIpCheck = im.LoadExtension<ServerIpCheck>();
            messageCarbons = im.LoadExtension<MessageCarbons>();
            inBandRegistration = im.LoadExtension<InBandRegistration>();
            chatStateNotifications = im.LoadExtension<ChatStateNotifications>();
            bitsOfBinary = im.LoadExtension<BitsOfBinary>();
            vcardAvatars = im.LoadExtension<VCardAvatars>();
            cusiqextension = im.LoadExtension<CustomIqExtension>();
            messageArchiving = im.LoadExtension<MessageArchiving>();
            messageArchiveManagement = im.LoadExtension<MessageArchiveManagement>();
            multiUserChat = im.LoadExtension<MultiUserChat>();
            serviceAdministration = im.LoadExtension<ServiceAdministration>();
            adHocCommands = im.LoadExtension<AdHocCommands>();
            directMucInvitations = im.LoadExtension<DirectMucInvitations>();
        }
示例#32
0
		/// <summary>
		/// Initializes the various XMPP extension modules.
		/// </summary>
		void LoadExtensions() {
			version = im.LoadExtension<SoftwareVersion>();
			sdisco = im.LoadExtension<ServiceDiscovery>();
			ecapa = im.LoadExtension<EntityCapabilities>();
			ping = im.LoadExtension<Ping>();
			attention = im.LoadExtension<Attention>();
			time = im.LoadExtension<EntityTime>();
			block = im.LoadExtension<BlockingCommand>();
			pep = im.LoadExtension<Pep>();
			userTune = im.LoadExtension<UserTune>();
			userAvatar = im.LoadExtension<UserAvatar>();
			userMood = im.LoadExtension<UserMood>();
			dataForms = im.LoadExtension<DataForms>();
			featureNegotiation = im.LoadExtension<FeatureNegotiation>();
			streamInitiation = im.LoadExtension<StreamInitiation>();
			siFileTransfer = im.LoadExtension<SIFileTransfer>();
			inBandBytestreams = im.LoadExtension<InBandBytestreams>();
			userActivity = im.LoadExtension<UserActivity>();
			socks5Bytestreams = im.LoadExtension<Socks5Bytestreams>();
			FileTransferSettings = new FileTransferSettings(socks5Bytestreams,
				siFileTransfer);
			serverIpCheck = im.LoadExtension<ServerIpCheck>();
			inBandRegistration = im.LoadExtension<InBandRegistration>();
			chatStateNotifications = im.LoadExtension<ChatStateNotifications>();
			bitsOfBinary = im.LoadExtension<BitsOfBinary>();
		}