コード例 #1
0
 public ShamanClientFactory()
 {
     _logger = new ConsoleLogger("C", LogLevel.Error | LogLevel.Info);
     _taskSchedulerFactory = new TaskSchedulerFactory(_logger);
     _serializer           = new BinarySerializer();
     _requestSender        = new TestClientHttpSender(_logger, _serializer);
     _clientPeerListener   = new TestClientPeerListener(_logger);
     _clientPeerConfig     = new ClientPeerConfig();
 }
コード例 #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();
            }
        }