private void SetAndReportStatus(ShamanClientStatus status, Action <ShamanConnectionStatus, JoinInfo> statusCallback = null, bool isSuccess = true, string error = "") { var prevStatus = _status; _status = status; statusCallback?.Invoke(new ShamanConnectionStatus(status, isSuccess, error), JoinInfo); if (prevStatus != _status) { _listener?.OnStatusChanged(prevStatus, status); } }
public ShamanClientPeer(IShamanLogger logger, ITaskSchedulerFactory taskSchedulerFactory, ISerializer serializer, IRequestSender requestSender, IShamanClientPeerListener listener, IShamanClientPeerConfig config) { _status = ShamanClientStatus.Offline; _shamanMessageHandler = new MessageHandler(logger, serializer); _bundleMessageHandler = new MessageHandler(logger, serializer); _logger = logger; _taskScheduler = taskSchedulerFactory.GetTaskScheduler(); // _serializer.InitializeDefaultSerializers(0, "client"); _clientPeer = new ClientPeer(logger, taskSchedulerFactory, config.MaxPacketSize, config.SendTickMs); _requestSender = requestSender; _listener = listener; _clientPeer.OnDisconnectedFromServer += (reason) => { switch (_status) { case ShamanClientStatus.ConnectingGameServer: case ShamanClientStatus.AuthorizingGameServer: case ShamanClientStatus.JoiningRoom: case ShamanClientStatus.InRoom: case ShamanClientStatus.LeavingRoom: OnDisconnectedFromGameServer?.Invoke(reason); break; case ShamanClientStatus.ConnectingMatchMaking: case ShamanClientStatus.AuthorizingMatchMaking: case ShamanClientStatus.JoiningMatchMaking: case ShamanClientStatus.OnMatchMaking: case ShamanClientStatus.LeavingMatchMaking: OnDisconnectedFromMmServer?.Invoke(reason); break; } OnDisconnected?.Invoke(reason); SetAndReportStatus(ShamanClientStatus.Disconnected, _statusCallback, error: reason.ToString()); ResetState(); }; _pollPackageQueueIntervalMs = config.PollPackageQueueIntervalMs; if (config.StartOtherThreadMessageProcessing) { StartProcessingMessagesLoop(); } }
public ShamanConnectionStatus(ShamanClientStatus status, bool isSuccess = true, string error = "") { Status = status; Error = error; IsSuccess = isSuccess; }
public void OnStatusChanged(ShamanClientStatus prevStatus, ShamanClientStatus newStatus) { _logger.LogInfo($"Status changed from {prevStatus} to {newStatus}"); }
private void ResetState() { _matchMakingProperties = null; _statusCallback = null; _status = ShamanClientStatus.Offline; }