Пример #1
0
        private async void AnotherTry(IConnector connector)
        {
            Print(ReplicManager.Special(connector.Error));
            if (!_disposed)
            {
                await Task.Delay(10000);

                TryConnect(connector);
            }
        }
Пример #2
0
        /// <summary>
        /// Пользовательское сообщение
        /// </summary>
        /// <param name="messageType">Тип сообщения</param>
        /// <param name="text">Текст сообщения</param>
        /// <param name="personRole">Роль источника сообщения (для реплик)</param>
        /// <param name="personIndex">Индекс источника сообщения (для реплик игроков)</param>
        internal void UserMessage(MessageTypes messageType, string text, GameRole?personRole = null, int?personIndex = null)
        {
            switch (messageType)
            {
            case MessageTypes.System:
                Print(ReplicManager.System(text));
                break;

            case MessageTypes.Special:
                Print(ReplicManager.Special(text));
                break;

            case MessageTypes.Replic:
                if (!personRole.HasValue)
                {
                    throw new ArgumentNullException(nameof(personRole));
                }

                switch (personRole.Value)
                {
                case GameRole.Viewer:         // Не используется
                    break;

                case GameRole.Player:
                    if (!personIndex.HasValue)
                    {
                        throw new ArgumentNullException(nameof(personIndex));
                    }

                    Print(Player(personIndex.Value) + ReplicManager.Replic(text));
                    break;

                case GameRole.Showman:
                    Print(Showman() + ReplicManager.Replic(text));
                    break;
                }

                break;
            }

            var person = messageType == MessageTypes.System ? ReplicCodes.System.ToString()
                : messageType == MessageTypes.Special ? ReplicCodes.Special.ToString() :
                         (personRole == GameRole.Player ? ReplicCodes.Player + personIndex.Value.ToString() : ReplicCodes.Showman.ToString());

            SendMessageWithArgs(Messages.Replic, person, text);
        }
Пример #3
0
        /// <summary>
        /// Попытка осуществить повторное подключение к серверу
        /// </summary>
        public async void TryConnect(IConnector connector)
        {
            try
            {
                Print(ReplicManager.Special(_actor.LO[nameof(R.TryReconnect)]));

                var result = await connector.ReconnectToServer();

                if (!result)
                {
                    AnotherTry(connector);
                    return;
                }

                Print(ReplicManager.Special(_actor.LO[nameof(R.ReconnectOK)]));
                await connector.RejoinGame();

                if (!string.IsNullOrEmpty(connector.Error))
                {
                    if (connector.CanRetry)
                    {
                        AnotherTry(connector);
                    }
                    else
                    {
                        Print(ReplicManager.Special(connector.Error));
                    }
                }
                else
                {
                    Print(ReplicManager.Special(_actor.LO[nameof(R.ReconnectEntered)]));
                }
            }
            catch (Exception exc)
            {
                try { _data.BackLink.OnError(exc); }
                catch { }
            }
        }
Пример #4
0
        virtual public void Stage()
        {
            switch (_data.Stage)
            {
            case GameStage.Before:
                break;

            case GameStage.Begin:
                TInfo.TStage = TableStage.Sign;

                if (_data.BackLink.MakeLogs && _data.ProtocolWriter == null)
                {
                    try
                    {
                        var stream = _data.BackLink.CreateLog(_actor.Client.Name, out string path);
                        _data.ProtocolPath   = path;
                        _data.ProtocolWriter = new StreamWriter(stream);
                        _data.ProtocolWriter.Write("<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><title>" + _actor.LO[nameof(R.LogTitle)] + "</title></head><body style=\"font-face: Verdana\">");
                    }
                    catch (IOException)
                    {
                    }
                    catch (ArgumentException exc)
                    {
                        _data.BackLink.OnError(exc);
                    }
                    catch (UnauthorizedAccessException exc)
                    {
                        _data.BackLink.OnError(exc);
                    }
                }

                Print(ReplicManager.Special(_actor.LO[nameof(R.GameStarted)] + " " + DateTime.Now.ToString()));
                break;

            case GameStage.Round:
            case GameStage.Final:
                TInfo.TStage = TableStage.Round;
                _data.Sound  = "beginround";

                foreach (var item in _data.Players)
                {
                    item.State = PlayerState.None;
                    item.Stake = 0;

                    item.SafeStake = false;
                }
                break;

            case GameStage.After:
                if (_data.ProtocolWriter != null)
                {
                    _data.ProtocolWriter.Write("</body></html>");
                }
                else
                {
                    _data.OnAddString(null, _actor.LO[nameof(R.ErrorWritingLogs)], LogMode.Chat);
                }
                break;

            default:
                break;
            }
        }