Example #1
0
        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);
            }
        }
Example #2
0
        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();
            }
        }
Example #3
0
 public ShamanConnectionStatus(ShamanClientStatus status, bool isSuccess = true, string error = "")
 {
     Status    = status;
     Error     = error;
     IsSuccess = isSuccess;
 }
Example #4
0
 public void OnStatusChanged(ShamanClientStatus prevStatus, ShamanClientStatus newStatus)
 {
     _logger.LogInfo($"Status changed from {prevStatus} to {newStatus}");
 }
Example #5
0
 private void ResetState()
 {
     _matchMakingProperties = null;
     _statusCallback        = null;
     _status = ShamanClientStatus.Offline;
 }