示例#1
0
        public async Task ConnectAsync(string input, global::ryu_s.BrowserCookie.IBrowserProfile browserProfile)
        {
            var broadcasterId = Tools.ExtractBroadcasterId(input);

            _broadcasterId = broadcasterId;
            if (string.IsNullOrEmpty(broadcasterId))
            {
                //Info
                return;
            }
            _cc = CreateCookieContainer(browserProfile);

            CanConnect    = false;
            CanDisconnect = true;
            _first.Reset();
            int cnum = -1;

            string audienceId;

            try
            {
                var(context, contextRaw) = await API.GetLiveContext(_server, broadcasterId, _cc);

                cnum    = context.MovieCnum;
                _liveId = context.MovieId;
                Connected?.Invoke(this, new ConnectedEventArgs
                {
                    IsInputStoringNeeded = true,
                    UrlToRestore         = broadcasterId,
                });
                if (!string.IsNullOrEmpty(context.AudienceId))
                {
                    audienceId = context.AudienceId;
                    SendSystemInfo($"ログイン済みユーザID:{audienceId}", InfoType.Notice);
                    IsLoggedIn = true;
                }
                else
                {
                    SendSystemInfo("未ログイン", InfoType.Notice);
                    IsLoggedIn = false;
                }
            }
            catch (HttpRequestException ex)
            {
                _logger.LogException(ex);
                string message;
                if (ex.InnerException != null)
                {
                    message = ex.InnerException.Message;
                }
                else
                {
                    message = ex.Message;
                }
                SendSystemInfo(message, InfoType.Debug);
            }
            catch (InvalidBroadcasterIdException ex)
            {
                _logger.LogException(ex, "", $"input=\"{input}\"");
                SendSystemInfo("入力されたURLまたはIDは存在しないか無効な値です", InfoType.Notice);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                _logger.LogException(ex);
                SendSystemInfo(ex.Message, InfoType.Debug);
            }
            if (cnum < 0 || _liveId < 0)
            {
                AfterDisconnected();
                return;
            }
            try
            {
                _messageProvider = new MessageProvider(_server, _siteOptions, _cc, _userStoreManager, _options, this, _logger)
                {
                    SiteContextGuid = SiteContextGuid,
                };
                _messageProvider.MetaReceived    += MessageProvider_MetaReceived;
                _messageProvider.MessageReceived += MessageProvider_MessageReceived;
                _messageProvider.InfoOccured     += MessageProvider_InfoOccured;

                await _messageProvider.ConnectAsync(broadcasterId, cnum, _liveId);
            }
            catch (Exception ex)
            {
                SendSystemInfo(ex.Message, InfoType.Error);
                _logger.LogException(ex);
            }
            finally
            {
                AfterDisconnected();
            }
        }
示例#2
0
 private void AfterDisconnected()
 {
     _messageProvider = null;
     CanConnect       = true;
     CanDisconnect    = false;
 }