public TwicasAutoReconnector(string broadcasterId, CookieContainer cc, IDataServer server, ILogger logger, WebsocketMessageProvider p1, MetadataProvider p2)
 {
     _broadcasterId     = broadcasterId;
     _cc                = cc;
     _server            = server;
     _logger            = logger;
     _connectionManager = new ConnectionManager(logger);
     _p1                = p1;
     _p2                = p2;
     p2.LiveIdReceived += P2_LiveIdReceived;
 }
        public override async Task ConnectAsync(string input, IBrowserProfile browserProfile)
        {
            BeforeConnect();
            _first.Reset();
            _cc                      = GetCookieContainer(browserProfile, "twitcasting.tv");
            _broadcasterId           = Tools.ExtractBroadcasterId(input);
            _lastCommentId           = 0;
            var(context, contextRaw) = await API.GetLiveContext(_server, _broadcasterId, _cc);

            if (!string.IsNullOrEmpty(context.AudienceId))
            {
                SendSystemInfo($"ログイン済みユーザID:{context.AudienceId}", InfoType.Notice);
                IsLoggedIn = true;
            }
            else
            {
                SendSystemInfo("未ログイン", InfoType.Notice);
                IsLoggedIn = false;
            }
            //配信歴がある場合は初期コメントを取得する
            if (context.MovieId > 0)
            {
                var initialComments = await GetInitialComments(context.MovieId);

                foreach (var initialComment in initialComments)
                {
                    RaiseMessageReceived(initialComment);
                }
            }

            var p1 = new WebsocketMessageProvider(new Websocket(), _server);

            p1.MessageReceived += P1_MessageReceived;
            var p2 = new MetadataProvider(_logger, _server, _broadcasterId, _messenger);

            p2.ItemReceived     += P2_ItemReceived;
            p2.LiveIdReceived   += P2_LiveIdReceived;
            p2.MetadataReceived += P2_MetadataReceived;
            _autoReconnector     = new TwicasAutoReconnector(_broadcasterId, _cc, _server, _logger, p1, p2);
            try
            {
                await _autoReconnector.AutoReconnectAsync();
            }
            finally
            {
                _autoReconnector = null;
                AfterDisconnected();
            }
        }