public NetworkPersistenceManager(Client client)
        {
            this.client  = client;
            subscription = client.Subscribe(this);

            packages    = new ConcurrentDictionary <uint, Awaiter>();
            logger      = (TypeContainer.GetOrNull <ILogger>() ?? NullLogger.Default).As(typeof(NetworkPersistenceManager));
            awaiterPool = TypeContainer.Get <IPool <Awaiter> >();
            packagePool = TypeContainer.Get <PackagePool>();
        }
Beispiel #2
0
        private static void Main(string[] args)
        {
            using (var typeContainer = TypeContainer.Get <ITypeContainer>())
            {
                Startup.Register(typeContainer);
                Startup.ConfigureLogger(ClientType.GameServer);

                Network.Startup.Register(typeContainer);

                logger = (TypeContainer.GetOrNull <ILogger>() ?? NullLogger.Default).As("OctoAwesome.GameServer");
                AppDomain.CurrentDomain.UnhandledException += (s, e) =>
                {
                    File.WriteAllText(
                        Path.Combine(".", "logs", $"server-dump-{DateTime.Now:ddMMyy_hhmmss}.txt"),
                        e.ExceptionObject.ToString());

                    logger.Fatal($"Unhandled Exception: {e.ExceptionObject}", e.ExceptionObject as Exception);
                    logger.Flush();
                };

                manualResetEvent = new ManualResetEvent(false);

                logger.Info("Server start");
                var      fileInfo = new FileInfo(Path.Combine(".", "settings.json"));
                Settings settings;

                if (!fileInfo.Exists)
                {
                    logger.Debug("Create new Default Settings");
                    settings = new Settings()
                    {
                        FileInfo = fileInfo
                    };
                    settings.Save();
                }
                else
                {
                    logger.Debug("Load Settings");
                    settings = new Settings(fileInfo);
                }


                typeContainer.Register(settings);
                typeContainer.Register <ISettings, Settings>(settings);
                typeContainer.Register <ServerHandler>(InstanceBehaviour.Singleton);
                typeContainer.Get <ServerHandler>().Start();

                Console.CancelKeyPress += (s, e) => manualResetEvent.Set();
                manualResetEvent.WaitOne();
                settings.Save();
            }
        }
        public NetworkUpdateManager(Client client, IUpdateHub updateHub)
        {
            this.client    = client;
            this.updateHub = updateHub;

            logger = (TypeContainer.GetOrNull <ILogger>() ?? NullLogger.Default).As(typeof(NetworkUpdateManager));
            entityNotificationPool        = TypeContainer.Get <IPool <EntityNotification> >();
            blockChangedNotificationPool  = TypeContainer.Get <IPool <BlockChangedNotification> >();
            blocksChangedNotificationPool = TypeContainer.Get <IPool <BlocksChangedNotification> >();
            packagePool = TypeContainer.Get <PackagePool>();

            hubSubscription    = updateHub.Subscribe(this, DefaultChannels.Network);
            clientSubscription = client.Subscribe(this);
        }
Beispiel #4
0
        public ServerHandler()
        {
            logger = (TypeContainer.GetOrNull <ILogger>() ?? NullLogger.Default).As(typeof(ServerHandler));

            TypeContainer.Register <UpdateHub>(InstanceBehaviour.Singleton);
            TypeContainer.Register <IUpdateHub, UpdateHub>(InstanceBehaviour.Singleton);
            TypeContainer.Register <Server>(InstanceBehaviour.Singleton);
            TypeContainer.Register <SimulationManager>(InstanceBehaviour.Singleton);

            SimulationManager = TypeContainer.Get <SimulationManager>();
            UpdateHub         = TypeContainer.Get <IUpdateHub>();
            server            = TypeContainer.Get <Server>();

            defaultManager = new DefaultCommandManager <ushort, CommandParameter, byte[]>(typeof(ServerHandler).Namespace + ".Commands");
        }