コード例 #1
0
ファイル: Player.cs プロジェクト: Blazoned/HideNSeekDomoticz
        /// <summary>
        /// Execute incomming commands on host player.
        /// </summary>
        /// <param name="command">The command to execute.</param>
        /// <param name="arguments">Additional arguments to the command.</param>
        /// <returns>Returns the command results.</returns>
        private string ExecuteCommandsLocally(ERemoteCommand command, string arguments)
        {
            Hider hider = this as Hider;

            switch (command)
            {
            case ERemoteCommand.StartGame:
                StartGame();
                break;

            case ERemoteCommand.EndGame:
                EndGame();
                break;

            case ERemoteCommand.GuessRoom:
                return(hider?.CheckRoom(arguments).ToString());

            case ERemoteCommand.AddPoints:
                AddPoints(int.Parse(arguments));
                break;

            case ERemoteCommand.GetMap:
                return(JsonConvert.SerializeObject(hider?.Map));

            case ERemoteCommand.GetPosition:
                return(JsonConvert.SerializeObject(hider?.GetPosition()));

            default:
                return(string.Empty);
            }

            return(string.Empty);
        }
コード例 #2
0
        /// <summary>
        /// Checks if a hider is in the specified room.
        /// </summary>
        /// <param name="seeker">The seeker who is guessing.</param>
        /// <param name="playerName">The name of the hider.</param>
        /// <param name="roomName">The name of the room.</param>
        /// <returns>Returns true if the seeker has correctly guessed the room the hider was hiding in.</returns>
        public async Task <bool> GuessRoomAsync(Player seeker, string playerName, string roomName)
        {
            // If host is handling,
            // request data from hider
            if (_IsHost)
            {
                Hider hider = _hiders.Where(player => player.PlayerName == playerName).FirstOrDefault();
                return(bool.Parse(await hider.SendCommand(ERemoteCommand.GuessRoom, roomName)));
            }
            else
            {
                bool result = bool.Parse(await SendCommandToHost(playerName, EHostCommand.GuessRoom, roomName));

                if (result)
                {
                    await seeker.SendCommand(ERemoteCommand.AddPoints, 10.ToString());

                    // End game if all hiders are found.
                    if (_hiders.Count(hider => !hider.IsFound) <= 0)
                    {
                        _ = Task.Run(async() => await EndGame());
                    }
                }

                return(result);
            }
        }
コード例 #3
0
 /// <summary>
 /// Gets the position of a <see cref="Hider"/>.
 /// </summary>
 /// <param name="hiderUsername">The identifier of the hider.</param>
 /// <returns>The <see cref="Room"/> a <see cref="Hider"/> is currently in.</returns>
 public async Task <Room> GetHiderLocation(string hiderUsername)
 {
     if (_IsHost)
     {
         Hider hider = _hiders.Where(player => player.PlayerName == hiderUsername).FirstOrDefault();
         return(JsonConvert.DeserializeObject <Room>(await hider.SendCommand(ERemoteCommand.GetPosition, string.Empty)));
     }
     else
     {
         return(JsonConvert.DeserializeObject <Room>(await SendCommandToHost(hiderUsername, EHostCommand.GetHiderPosition, string.Empty)));
     }
 }
コード例 #4
0
        /// <summary>
        /// Execute incomming commands on remote
        /// </summary>
        /// <param name="player">The remote player.</param>
        /// <param name="command">The command to send.</param>
        /// <param name="arguments">Additional arguments to send.</param>
        /// <returns>Returns the command results.</returns>
        private string ExecuteRemoteCommands(Player player, string command, string arguments)
        {
            if (!Enum.TryParse(command, out ERemoteCommand remoteCommand))
            {
                return(string.Empty);
            }

            Hider hider = player as Hider;

            switch (remoteCommand)
            {
            case ERemoteCommand.StartGame:
                player.StartGame();
                break;

            case ERemoteCommand.EndGame:
                player.EndGame();
                break;

            case ERemoteCommand.GuessRoom:
                return(hider?.CheckRoom(arguments).ToString());

            case ERemoteCommand.AddPoints:
                player.AddPoints(int.Parse(arguments));
                break;

            case ERemoteCommand.GetMap:
                return(JsonConvert.SerializeObject(hider?.Map));

            case ERemoteCommand.GetPosition:
                return(JsonConvert.SerializeObject(hider?.GetPosition()));

            default:
                return(string.Empty);
            }

            return(string.Empty);
        }
コード例 #5
0
        /// <summary>
        /// Execute incomming commands on host
        /// </summary>
        /// <param name="target">The user target.</param>
        /// <param name="command">The command to send.</param>
        /// <param name="arguments">Additional arguments to send.</param>
        /// <returns>Returns the command results.</returns>
        private async Task <string> ExecuteHostCommands(string target, string command, string arguments)
        {
            if (!Enum.TryParse(command, out EHostCommand hostCommand))
            {
                return(string.Empty);
            }

            switch (hostCommand)
            {
            case EHostCommand.Disconnect:
                Player player = _hiders.FirstOrDefault(p => p.PlayerName == target) ?? (Player)_seekers.FirstOrDefault(p => p.PlayerName == target);
                player?.Client.Close();
                break;

            case EHostCommand.EndGame:
                await EndGame();

                break;

            case EHostCommand.GetRemainingTime:
                return(_remainingHidingTime.ToString());

            case EHostCommand.GuessRoom:
                Hider hider  = _hiders.FirstOrDefault(p => p.PlayerName == target);
                bool  result = await hider?.SendCommand(ERemoteCommand.GetPosition, string.Empty) == arguments;

                return(result.ToString());

            case EHostCommand.ViewMaps:
                return(JsonConvert.SerializeObject(await ViewMapsAsync()));

            default:
                return(string.Empty);
            }

            return(string.Empty);
        }