public void SendFleet(int sourcePlanetId, int destinationPlanetId, int numShips)
 {
     var moveRequest = new MoveRequest()
     {
         AuthToken = AuthToken,
         GameId = GameId,
         SourcePlanetId = sourcePlanetId,
         DestinationPlanetId = destinationPlanetId,
         NumberOfShips = numShips
     };
     _pendingMoveRequests.Add(moveRequest);
 }
        public void SendFleet(int sourcePlanetId, int destinationPlanetId, int numShips)
        {
            var moveRequest = new MoveRequest()
            {
                AuthToken           = AuthToken,
                GameId              = GameId,
                SourcePlanetId      = sourcePlanetId,
                DestinationPlanetId = destinationPlanetId,
                NumberOfShips       = numShips
            };

            _pendingMoveRequests.Add(moveRequest);
        }
 public MoveResult Execute(MoveRequest request)
 {
     var game = Games[request.GameId];
     var result = game.MoveFleet(request);
     result.Success = true;
     return result;
 }
        public MoveResult MoveFleet(MoveRequest request)
        {

            var result = new MoveResult();
            
            // non-zero ships
            if(request.NumberOfShips <= 0) {
                result.Success = false;
                result.Message = "Can't send a zero fleet";
                return result;
            }

            var validSourcePlanets = _getPlanetsForPlayer(request.AuthToken);

            // A planet of the requested source ID exists, belongs to that planer, AND it has enough ships
            var sourceValid = validSourcePlanets.FirstOrDefault(p => p.Id == request.SourcePlanetId && request.NumberOfShips <= p.NumberOfShips);

            // A planet of the requested destination ID exists
            var destinationValid = _planets.FirstOrDefault(p => p.Id == request.DestinationPlanetId);


            if (sourceValid != null && destinationValid != null)
            {
                lock (synclock)
                {
                    // Subtract ships from planet
                    sourceValid.NumberOfShips -= request.NumberOfShips;

                    // Build fleet
                    var newFleet = new Fleet()
                    {
                        Id = _MAXFLEETID++,
                        OwnerId = _authTokenToId(request.AuthToken),
                        Source = sourceValid,
                        Destination = destinationValid,
                        NumberOfShips = request.NumberOfShips,
                        NumberOfTurnsToDestination = (int)Math.Ceiling(sourceValid.Position.Distance(destinationValid.Position))
                    };

                    _fleets.Add(newFleet);

                    result.Fleet = Mapper.Map<Shared.Fleet>(newFleet);
                    result.Success = true;
                }
            }
            else
            {
                result.Success = false;
                result.Message = "Invalid move command, check if the planet of the requested source/dest ID exists, belongs to that player, AND it has enough ships.";
            }


            return result;
        }
 public MoveResult Execute(MoveRequest request)
 {
     var game = Games[request.GameId];
     return game.MoveFleet(request);
 }