Ejemplo n.º 1
0
        public async Task RefreshConfigFileAsync(bool force = false)
        {
            CreateConfigDirectory();

            bool requireRefresh = force || File.Exists(HasChangesFile);

            if (!requireRefresh)
            {
                return;
            }

            Logger.LogInformation("Reloading config...");

            var newGlobalConfig = await LoadGlobalConfigAsync();

            if (newGlobalConfig != StickyConfig)
            {
                StickyConfig = newGlobalConfig;
            }

            var newServerConfigs = await LoadServerConfigsAsync();

            var addedConfigs   = newServerConfigs.Except(Configs);
            var removedConfigs = Configs.Except(newServerConfigs);

            var duplicates = newServerConfigs.GroupBy(x => x.Port)
                             .Where(x => x.Count() > 1)
                             .ToList();

            foreach (var duplicate in duplicates)
            {
                int port = duplicate.Key;
                Logger.LogError($"There are multiple StickyNets registered for port {port}! Please remove the duplicates!");
                Logger.LogWarning("Ignoring duplicates!");

                newServerConfigs.RemoveAll(x => x.Port == port);
                newServerConfigs.Add(duplicate.First());
            }

            foreach (var config in removedConfigs)
            {
                if (ServerRemoved != null)
                {
                    await ServerRemoved.Invoke(config);
                }
            }
            foreach (var config in addedConfigs)
            {
                if (ServerAdded != null)
                {
                    await ServerAdded.Invoke(config);
                }
            }


            Configs = newServerConfigs.ToList();

            File.Delete(HasChangesFile);
        }
Ejemplo n.º 2
0
        public Server Create(ConnectionArgs args)
        {
            var newServer = new Server(args);

            ServerList.Add(newServer);

            ServerAdded.Fire(this, new ServerEventArgs(newServer));

            return(newServer);
        }
Ejemplo n.º 3
0
        private void ServiceResolved(DNSSDService resolver, DNSSDFlags flags, uint ifIndex, string fullName, string hostName, ushort port, TXTRecord txtRecord)
        {
            Log("Service " + hostName + ":" + port + " resolved");
            resolver.Stop();
            string serviceName = resolvers[resolver];
            Server server      = new Server(serviceName, hostName, port, this);

            Mutex.WaitOne();
            servers.Add(server);
            resolvers.Remove(resolver);
            ServerAdded?.Invoke(server);
            Mutex.ReleaseMutex();
        }