public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            ServerProcessorContext processorContext = (ServerProcessorContext)context;
            PlayerManager          playerManager    = processorContext.Server.PlayerManager;
            ServerSettings         serverSettings   = processorContext.Server.Settings;

            SessionData       sessionData       = new SessionData(serverSettings.Name, serverSettings.PasswordProtected, playerManager.GetPlayerCount());
            SessionDataPacket sessionDataPacket = new SessionDataPacket(sessionData);

            processorContext.Server.SendPacketToPlayer(sessionDataPacket, sourcePlayerId);
        }
        public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            ServerProcessorContext processorContext = (ServerProcessorContext)context;
            PlayerManager          playerManager    = processorContext.Server.PlayerManager;

            if (!playerManager.PlayerExists(sourcePlayerId))
            {
                return; // what
            }
            Player player = playerManager.GetPlayer(sourcePlayerId);

            player.State = PlayerState.ConnectedLoadingData;
            playerManager.UpdatePlayer(player);
        }
        public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            ServerProcessorContext processorContext = (ServerProcessorContext)context;
            WorldDataPacket        worldDataPacket  = (WorldDataPacket)packet;

            Player?simulationOwner = processorContext.Server.SimulationManager.GetSimulationOwner();

            if (simulationOwner == null || sourcePlayerId != simulationOwner.Value.Id)
            {
                //Deny request if client isn't the simulation owner
                return;
            }

            processorContext.Server.WorldStateManager.OnWorldDataReceived(worldDataPacket.World);
        }
        public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            ServerProcessorContext processorContext  = (ServerProcessorContext)context;
            SimulationManager      simulationManager = processorContext.Server.SimulationManager;
            DisasterManager        disasterManager   = processorContext.Server.DisasterManager;

            Player?simulationOwner = simulationManager.GetSimulationOwner();

            if (simulationOwner == null || sourcePlayerId != simulationOwner.Value.Id)
            {
                //Deny request if client isn't the simulation owner
                return;
            }

            disasterManager.EndDisaster();
        }
        public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            UpdateEnvironmentDataPacket updateEnvironmentDataPacket = (UpdateEnvironmentDataPacket)packet;
            ServerProcessorContext      processorContext            = (ServerProcessorContext)context;
            SimulationManager           simulationManager           = processorContext.Server.SimulationManager;
            EnvironmentManager          environmentManager          = processorContext.Server.EnvironmentManager;

            Player?simulationOwner = simulationManager.GetSimulationOwner();

            if (simulationOwner == null || sourcePlayerId != simulationOwner.Value.Id)
            {
                //Deny request if client isn't the simulation owner
                return;
            }

            environmentManager.UpdateEnvironmentData(updateEnvironmentDataPacket.Time, updateEnvironmentDataPacket.WindLevel, updateEnvironmentDataPacket.WindDirection);
        }
Esempio n. 6
0
        public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            ServerProcessorContext    processorContext          = (ServerProcessorContext)context;
            AuthenticateRequestPacket authenticateRequestPacket = (AuthenticateRequestPacket)packet;
            ServerSettings            serverSettings            = processorContext.Server.Settings;
            PlayerManager             playerManager             = processorContext.Server.PlayerManager;
            SimulationManager         simulationManager         = processorContext.Server.SimulationManager;

            AuthenticatePacket authenticateResponsePacket;

            if (playerManager.PlayerExists(sourcePlayerId))
            {
                return; // Player already authenticated
            }
            // Will fail if the requested username contains disallowed characters/does not meet length requirements/etc.
            if (!playerManager.IsUsernameAllowed(authenticateRequestPacket.Username))
            {
                authenticateResponsePacket = new AuthenticatePacket(false, AuthenticationErrorReason.IllegalUsername, null, null, null);
                Console.WriteLine($"Player {sourcePlayerId} attempted joining with an illegal username");
            }
            // Will fail if a player with the same nickname is already connected.
            else if (playerManager.IsUsernameTaken(authenticateRequestPacket.Username))
            {
                authenticateResponsePacket = new AuthenticatePacket(false, AuthenticationErrorReason.UsernameTaken, null, null, null);
                Console.WriteLine($"Player {sourcePlayerId} attempted joining with an already taken username: {authenticateRequestPacket.Username}");
            }
            // Will fail if the authenticating client provided an incorrect server password.
            else if (serverSettings.PasswordProtected && serverSettings.Password != authenticateRequestPacket.Password)
            {
                authenticateResponsePacket = new AuthenticatePacket(false, AuthenticationErrorReason.IncorrectPassword, null, null, null);
                Console.WriteLine($"Player {sourcePlayerId} attempted joining with an incorrect password");
            }
            // Approve authentication request and let other players know that a player joined.
            else
            {
                Player   client          = playerManager.CreatePlayer(sourcePlayerId, authenticateRequestPacket.Username, state: PlayerState.ConnectedMainMenu);
                Player[] players         = playerManager.GetPlayers().ToArray();
                Player?  simulationOwner = simulationManager.GetSimulationOwner();
                authenticateResponsePacket = new AuthenticatePacket(true, null, client, players, simulationOwner);
                Console.WriteLine($"Player {sourcePlayerId} successfully authenticated!");
            }

            processorContext.Server.SendPacketToPlayer(authenticateResponsePacket, sourcePlayerId);
        }
Esempio n. 7
0
        public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            WorldDataRequestPacket   worldDataRequestPacket   = (WorldDataRequestPacket)packet;
            ServerProcessorContext   processorContext         = (ServerProcessorContext)context;
            PlayerManager            playerManager            = processorContext.Server.PlayerManager;
            SimulationManager        simulationManager        = processorContext.Server.SimulationManager;
            TimeManager              timeManager              = processorContext.Server.TimeManager;
            WorldRequestQueueManager worldRequestQueueManager = processorContext.Server.WorldRequestQueueManager;
            WorldStateManager        worldStateManager        = processorContext.Server.WorldStateManager;

            if (!playerManager.PlayerExists(sourcePlayerId))
            {
                // Players can not ask for a copy of the world before they authenticate
                return;
            }

            Player sourcePlayer = playerManager.GetPlayer(sourcePlayerId);

            if (sourcePlayer.State != PlayerState.ConnectedMainMenu)
            {
                // Invalid state
                return;
            }

            // We pause the game and lock time management until everyone has finished loading
            timeManager.FreezeTime();

            Player?simulationOwner = simulationManager.GetSimulationOwner();

            if (simulationOwner != null && simulationOwner.Value != sourcePlayer && worldStateManager.RequestWorldData())
            {
                // The server can get a newer world state
                // add the client to the queue and wait
                worldRequestQueueManager.EnqueuePlayer(sourcePlayer);
            }
            else
            {
                // The state we have is already the newest
                WorldStateData  worldStateData  = worldStateManager.GetWorldData();
                WorldDataPacket worldDataPacket = new WorldDataPacket(worldStateData);
                processorContext.Server.SendPacketToPlayer(worldDataPacket, sourcePlayerId);
            }
        }
Esempio n. 8
0
        public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            ServerProcessorContext processorContext = (ServerProcessorContext)context;
            PlayerManager          playerManager    = processorContext.Server.PlayerManager;
            TimeManager            timeManager      = processorContext.Server.TimeManager;

            if (!playerManager.PlayerExists(sourcePlayerId))
            {
                return; // what
            }
            Player player = playerManager.GetPlayer(sourcePlayerId);

            player.State = PlayerState.ConnectedReady;
            playerManager.UpdatePlayer(player);

            if (playerManager.GetPlayers().Count(p => p.State == PlayerState.ConnectedLoadingData) == 0)
            {
                timeManager.UnfreezeTime();
            }
        }
        public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            ServerProcessorContext processorContext = (ServerProcessorContext)context;
            PlayerManager          playerManager    = processorContext.Server.PlayerManager;
            TimeManager            timeManager      = processorContext.Server.TimeManager;

            Console.WriteLine($"Player {sourcePlayerId} requested a graceful disconnect");
            playerManager.DestroyPlayer(sourcePlayerId, DisconnectReason.DisconnectRequest);

            // We reply with another disconnect request to let the client know that we're ready for a graceful disconnect
            DisconnectRequestPacket disconnectReply = new DisconnectRequestPacket(DisconnectReason.DisconnectRequestResponse);

            processorContext.Server.SendPacketToPlayer(disconnectReply, sourcePlayerId);

            processorContext.Server.playerConnections.Remove(sourcePlayerId);
            if (playerManager.GetPlayers().Count(p => p.State == PlayerState.ConnectedLoadingData) == 0)
            {
                timeManager.UnfreezeTime();
            }
        }
        public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            TimeScaleUpdatePacket  timeScaleUpdatePacket = (TimeScaleUpdatePacket)packet;
            ServerProcessorContext processorContext      = (ServerProcessorContext)context;
            SimulationManager      simulationManager     = processorContext.Server.SimulationManager;
            TimeManager            timeManager           = processorContext.Server.TimeManager;

            Player?simulationOwner = simulationManager.GetSimulationOwner();

            if (simulationOwner == null || sourcePlayerId != simulationOwner.Value.Id)
            {
                //Deny request if client isn't the simulation owner
                return;
            }

            if (timeManager.IsTimeLocked())
            {
                // The server is holding onto the current timescale
                // Inform the client, maybe?
                return;
            }

            timeManager.SetTimescale(timeScaleUpdatePacket.TimeScale, timeScaleUpdatePacket.IsPaused);
        }