Ejemplo n.º 1
0
        void OnJoinGameRequest(ClientToServerMessage message)
        {
            JoinGameRequest request = message.JoinGameRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid join game request");
            }
            // Defaults to false so lazy/afk players lose the first turn privilege
            _RequestedFirstTurn = false;
            InitialiseArmy(request.Army);
            Faction faction = Server.GetFaction(request.Army.FactionId);
            bool    success = Server.OnJoinGameRequest(this, request, out _Game);

            if (success)
            {
                _PlayerState = new PanzerKontrol.PlayerState(Game, faction, PlayerIdentifier.Player2);
                InGameState(PlayerStateType.DeployingUnits, ClientToServerMessageType.InitialDeployment);
            }
            else
            {
                ServerToClientMessage reply = new ServerToClientMessage(ServerToClientMessageType.NoSuchGame);
                QueueMessage(reply);
            }
            Game.OnOpponentFound(this);
        }
Ejemplo n.º 2
0
        void OnInitialDeployment(ClientToServerMessage message)
        {
            Map map = Game.Map;
            InitialDeploymentRequest deployment = message.InitialDeploymentSubmission;

            if (deployment == null)
            {
                throw new ServerClientException("Invalid initial deployment");
            }
            // Reset the deployment state/position of all units to enable players to re-submit their initial deployment
            PlayerState.ResetUnitDeploymentState();
            foreach (var unitPosition in deployment.Units)
            {
                Unit unit = PlayerState.GetUnit(unitPosition.UnitId);
                if (unit == null)
                {
                    throw new ServerClientException("Encountered an invalid unit ID in the initial deployment");
                }
                PlayerState.InitialUnitDeployment(unit, unitPosition.Position);
            }
            _RequestedFirstTurn = deployment.RequestedFirstTurn;
            PlayerState.State   = PlayerStateType.HasDeployedUnits;
            if (Opponent.HasDeployed())
            {
                // The opponent has already submitted their deployment
                // Both players are ready, start the game
                Game.StartGame();
            }
        }
Ejemplo n.º 3
0
        void OnAttackUnit(ClientToServerMessage message)
        {
            AttackUnitRequest request = message.AttackUnitRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid attack unit request");
            }
            Unit attacker = PlayerState.GetUnit(request.AttackerUnitId);

            if (attacker == null)
            {
                throw new ServerClientException("Encountered an invalid attacking unit ID in an attack request");
            }
            Unit defender = Opponent.PlayerState.GetUnit(request.DefenderUnitId);

            if (defender == null)
            {
                throw new ServerClientException("Encountered an invalid target unit ID in an attack request");
            }
            PlayerState.AttackUnit(attacker, defender);
            UnitCasualties        attackerCasualties = new UnitCasualties(attacker.Id, attacker.Strength);
            UnitCasualties        defenderCasualties = new UnitCasualties(defender.Id, defender.Strength);
            UnitCombatBroadcast   casualties         = new UnitCombatBroadcast(attackerCasualties, defenderCasualties);
            ServerToClientMessage broadcast          = new ServerToClientMessage(casualties);

            BroadcastMessage(broadcast);
            AnnihilationCheck();
        }
Ejemplo n.º 4
0
        void OnMoveUnit(ClientToServerMessage message)
        {
            MoveUnitRequest request = message.MoveUnitRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid move unit request");
            }
            Unit unit = PlayerState.GetUnit(request.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in a move request");
            }
            int        movementPointsLeft;
            List <Hex> captures;

            PlayerState.MoveUnit(unit, request.NewPosition, out movementPointsLeft, out captures);
            UnitMoveBroadcast move = new UnitMoveBroadcast(unit.Id, movementPointsLeft);

            foreach (var hex in captures)
            {
                move.Captures.Add(hex.Position);
            }
            ServerToClientMessage broadcast = new ServerToClientMessage(move);

            BroadcastMessage(broadcast);
        }
Ejemplo n.º 5
0
        void OnCancelGameRequest(ClientToServerMessage message)
        {
            Server.OnCancelGameRequest(this);
            LoggedInState();
            ServerToClientMessage reply = new ServerToClientMessage(ServerToClientMessageType.CancelGameConfirmation);

            QueueMessage(reply);
        }
Ejemplo n.º 6
0
        void OnLoginRequest(ClientToServerMessage message)
        {
            LoginRequest request = message.LoginRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid login request");
            }
            LoginReply reply = Server.OnLoginRequest(request);

            if (reply.Type == LoginReplyType.Success)
            {
                _Name = request.Name;
                LoggedInState();
            }
            QueueMessage(new ServerToClientMessage(reply));
        }
Ejemplo n.º 7
0
        void ProcessMessage(ClientToServerMessage message)
        {
            if (!IsExpectedMessageType(message.Type))
            {
                // Ignore unexpected messages
                // These are usually the result of network delay
                // However, they could also be the result of broken client implementations so log it anyways
                WriteLine("Encountered an unexpected message type: {0}", message.Type);
                return;
            }
            MessageHandler handler;

            if (!MessageHandlerMap.TryGetValue(message.Type, out handler))
            {
                throw new Exception("Encountered an unknown server to client message type");
            }
        }
Ejemplo n.º 8
0
        void OnCreateGameRequest(ClientToServerMessage message)
        {
            CreateGameRequest request = message.CreateGameRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid game creation request");
            }
            // Defaults to false so lazy/afk players lose the first turn privilege
            _RequestedFirstTurn = false;
            InitialiseArmy(request.Army);
            Faction         faction = Server.GetFaction(request.Army.FactionId);
            CreateGameReply reply   = Server.OnCreateGameRequest(this, request, out _Game);

            QueueMessage(new ServerToClientMessage(reply));
            _PlayerState = new PanzerKontrol.PlayerState(Game, faction, PlayerIdentifier.Player1);
            WaitingForOpponentState();
        }
Ejemplo n.º 9
0
        void OnDeployUnit(ClientToServerMessage message)
        {
            UnitDeployment deployment = message.UnitDeployment;

            if (deployment == null)
            {
                throw new ServerClientException("Invalid unit deployment");
            }
            Unit unit = PlayerState.GetUnit(deployment.Unit.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in a deployment request");
            }
            PlayerState.DeployUnit(unit, deployment.Unit.Position);
            ServerToClientMessage broadcast = new ServerToClientMessage(deployment);

            BroadcastMessage(broadcast);
        }
Ejemplo n.º 10
0
        void OnEntrenchUnit(ClientToServerMessage message)
        {
            UnitEntrenched entrenchUnit = message.EntrenchUnit;

            if (entrenchUnit == null)
            {
                throw new ServerClientException("Invalid entrench unit request");
            }
            Unit unit = PlayerState.GetUnit(entrenchUnit.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in a move request");
            }
            PlayerState.EntrenchUnit(unit);
            ServerToClientMessage broadcast = new ServerToClientMessage(entrenchUnit);

            BroadcastMessage(broadcast);
        }
Ejemplo n.º 11
0
        void OnUpgradeUnit(ClientToServerMessage message)
        {
            UpgradeUnitRequest request = message.UpgradeUnitRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid upgrade unit request");
            }
            Unit unit = PlayerState.GetUnit(request.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in an upgrade request");
            }
            PlayerState.UpgradeUnit(unit, unit.GetUpgrade(request.UpgradeId));
            UnitUpgradedBroadcast unitUpgraded = new UnitUpgradedBroadcast(new ReinforcementState(PlayerState), unit.Id);
            ServerToClientMessage broadcast    = new ServerToClientMessage(unitUpgraded);

            BroadcastMessage(broadcast);
        }
Ejemplo n.º 12
0
        void OnReinforceUnit(ClientToServerMessage message)
        {
            ReinforceUnitRequest request = message.ReinforceUnitRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid unit reinforcement request");
            }
            Unit unit = PlayerState.GetUnit(request.UnitId);

            if (unit == null)
            {
                throw new ServerClientException("Encountered an invalid unit ID in a reinforcement request");
            }
            PlayerState.ReinforceUnit(unit);
            UnitReinforcementBroadcast unitReinforced = new UnitReinforcementBroadcast(new ReinforcementState(PlayerState), unit.Id, unit.Strength);
            ServerToClientMessage      broadcast      = new ServerToClientMessage(unitReinforced);

            BroadcastMessage(broadcast);
        }
Ejemplo n.º 13
0
        void OnPurchaseUnit(ClientToServerMessage message)
        {
            PurchaseUnitRequest request = message.PurchaseUnitRequest;

            if (request == null)
            {
                throw new ServerClientException("Invalid purchase request");
            }
            if (request.Unit.FactionId != PlayerState.Faction.Id)
            {
                throw new ServerClientException("Tried to purchase a unit from another faction");
            }
            Unit unit = new Unit(PlayerState, Game.GetUnitId(), request.Unit, Server);

            PlayerState.PurchaseUnit(unit);
            // Update the unit ID prior to broadcasting the purchase information
            UnitConfiguration unitConfiguration = request.Unit;

            unitConfiguration.UnitId = unit.Id;
            UnitPurchasedBroadcast unitPurchased = new UnitPurchasedBroadcast(new ReinforcementState(PlayerState), request.Unit);
            ServerToClientMessage  broadcast     = new ServerToClientMessage(unitPurchased);

            BroadcastMessage(broadcast);
        }
Ejemplo n.º 14
0
 void OnSurrender(ClientToServerMessage message)
 {
     Server.OnGameEnd(Game, GameOutcomeType.Surrender, Opponent);
 }
Ejemplo n.º 15
0
 void OnEndTurn(ClientToServerMessage message)
 {
     Game.NewTurn();
 }
Ejemplo n.º 16
0
 void OnError(ClientToServerMessage message)
 {
     ShuttingDown = true;
     WriteLine("A client experienced an error: {0}", message.ErrorMessage.Message);
 }
Ejemplo n.º 17
0
        void OnViewPublicGamesRequest(ClientToServerMessage message)
        {
            ViewPublicGamesReply reply = Server.OnViewPublicGamesRequest();

            QueueMessage(new ServerToClientMessage(reply));
        }