private async void AnotherTry(IConnector connector) { Print(ReplicManager.Special(connector.Error)); if (!_disposed) { await Task.Delay(10000); TryConnect(connector); } }
/// <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); }
/// <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 { } } }
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; } }