Пример #1
0
        public static Task RpcPlayerAsync(this TMGame @this, TMPlayer player, string methodName, params object[] args)
        {
            var room          = @this.Room;
            var rpcMethodName = $"TMGame_{@this.Id}_{methodName}";

            return(player.Client.RpcAsync(rpcMethodName, args));
        }
Пример #2
0
        public async Task NavigateToPlayerPage(TMPlayer player)
        {
            TaskCompletionSource <bool> isPlayerPageCompleted = null;
            const int timeout = 10000;

            _playerWb.DocumentCompleted += (s, e) =>
            {
                if (_playerWb.ReadyState != WebBrowserReadyState.Complete)
                {
                    return;
                }
                if (isPlayerPageCompleted.Task.IsCompleted)
                {
                    return;
                }
                AppendLog(string.Format("Player Page is loaded"));
                isPlayerPageCompleted.SetResult(true);
            };
            while (true)
            {
                isPlayerPageCompleted = new TaskCompletionSource <bool>();
                //navgiate to player url and wait for notification to parsePlayer
                var playerUrl = DomainUrl + player.Url;
                _playerWb.Navigate(playerUrl);

                var completionTask = isPlayerPageCompleted.Task;
                if (await Task.WhenAny(completionTask, Task.Delay(timeout)) == completionTask)
                {
                    var isPlayerOk = ParsePlayer();
                    if (isPlayerOk)
                    {
                        AppendLog(string.Format("Player is parsed, ID: {0}  URL: {1}", _rumorList[GetRumorIndex()].Player.Id,
                                                _playerWb.Url.AbsolutePath));
                    }
                    break;
                }
                //Navigate again to the page
                AppendLog(string.Format("Player Page had a timeout, URL: {0}", _playerWb.Url.AbsolutePath));
            }
        }
Пример #3
0
        public static Task <T> RpcWithChoiceAsync <T>(this TMPlayer @this, string methodName, IEnumerable <T> choices, bool canBeSkip = false, int timeLimitForDefaultResult = 15000)
        {
            var rpcMethodName = $"TMPlayer_{@this.Id}_{methodName}";

            return(@this.Client.RpcWithChoiceAsync <T>(rpcMethodName, choices, canBeSkip, timeLimitForDefaultResult));
        }
Пример #4
0
        public static Task RpcAsync(this TMPlayer @this, string methodName, params object[] args)
        {
            var rpcMethodName = $"TMPlayer_{@this.Id}_{methodName}";

            return(@this.Client.RpcAsync(rpcMethodName, args));
        }
Пример #5
0
        public static Task AlloctAsync(this TMPlayer player, IEnumerable <TMCharacter> characters)
        {
            var text = SlarkCorePlugins.Singleton.Encoder.Encode(characters);

            return(player.Client.SendAsync(text));
        }
Пример #6
0
        public bool IfWon(TMIntelligence receiving, IEnumerable <TMIntelligence> received, TMPlayer dying, TMPlayer winning)
        {
            var redAlreadyHad = received.CountInColor(TMIntelligence.TMColor.Red);

            if (receiving.IsRed)
            {
                if (redAlreadyHad == 2)
                {
                    return(true);
                }
            }
            return(false);
        }