예제 #1
0
 public JsActions(IElement element, string elementType, ILocalizedLogger logger, IBrowserProfile browserProfile)
 {
     this.element        = element;
     this.elementType    = elementType;
     this.browserProfile = browserProfile;
     Logger = logger;
 }
        private async Task ConnectInternalAsync(string input, IBrowserProfile browserProfile)
        {
            var roomName = GetRoomNameFromInput(input);

            if (string.IsNullOrEmpty(roomName))
            {
                throw new Exception("invalid input");
            }
            var livePageUrl  = "https://www.showroom-live.com/" + roomName;
            var livePageHtml = await _server.GetAsync(livePageUrl);

            var match = Regex.Match(livePageHtml, "room_id=(\\d+)");

            if (!match.Success)
            {
                throw new Exception("room_idが無い");
            }
            var room_id  = match.Groups[1].Value;
            var liveInfo = await Api.GetLiveInfo(_server, room_id);

            if (liveInfo.LiveStatus == 1)
            {
                //放送終了?
                return;
            }
            await _messageProvider.ReceiveAsync(liveInfo.BcsvrHost, liveInfo.BcsvrKey);

            return;
        }
예제 #3
0
        public async Task ConnectInternalAsync(string input, IBrowserProfile browserProfile)
        {
            var channelName = Tools.ExtractUserId(input);

            if (string.IsNullOrEmpty(channelName))
            {
                SendSystemInfo("入力値からチャンネル名を取得できませんでした", InfoType.Error);
                return;
            }
            var cc = GetCookieContainer(browserProfile, "mixer.com");

            await InitAsync();

            //var p2 = new MetadataProvider2(_server, _siteOptions);
            //p2.MetadataUpdated += P2_MetadataUpdated;
            //p2.Master = p1;
            try
            {
                var dummy             = new DummyImpl(_server, input, _logger, cc, _siteOptions, _p1);
                var connectionManager = new ConnectionManager(_logger);
                _autoReconnector = new NewAutoReconnector(connectionManager, dummy, new MessageUntara(), _logger);
                await _autoReconnector.AutoReconnectAsync();
            }
            finally
            {
                //p1.MessageReceived -= P1_MessageReceived;
                //p1.MetadataUpdated -= P1_MetadataUpdated;
                //p2.MetadataUpdated -= P2_MetadataUpdated;
            }
        }
        private async Task ConnectInternalAsync(string input, IBrowserProfile browserProfile)
        {
            var autoReconnectMode = false;
            var cc          = GetCookieContainer(browserProfile, "pscp.tv");
            var broadcastId = Tools.ExtractLiveId(input);

            var(avp, broadcastInfo) = await Api.GetAccessVideoPublicAsync(_server, broadcastId);

            await Api.GetAccessVideoAsync(_server, broadcastId, cc);

            if (!IsBroadcastRunning(broadcastInfo))
            {
                SendSystemInfo("放送が終了しているため切断します", InfoType.Notice);
                AfterDisconnected();
                return;
            }
            var acp = await Api.GetAccessChatPublicAsync(_server, avp.ChatToken);

            _messageProvider = new MessageProvider(new Websocket(), _logger);
            //_messageProvider.
            _messageProvider.Received += MessageProvider_Received;
            var hostname = Tools.ExtractHostnameFromEndpoint(acp.Endpoint);

            if (hostname.Contains("replay"))
            {
                SendSystemInfo("", InfoType.Error);
                return;
            }
            await _messageProvider.ReceiveAsync(hostname, acp.AccessToken, broadcastId);
        }
예제 #5
0
        public Task <ICurrentUserInfo> GetCurrentUserInfo(IBrowserProfile browserProfile)
        {
            var    cc          = GetCookieContainer(browserProfile);
            var    cookies     = Tools.ExtractCookies(cc);
            var    info        = new CurrentUserInfo();
            string name        = null;
            string displayName = null;

            foreach (var cookie in cookies)
            {
                switch (cookie.Name)
                {
                case "login":
                    name = cookie.Value;
                    break;

                case "twilight-user":
                {
                    //"{\"authToken\":\"rkpavalsbvBovec0qj2l5r5q0mnlm4\",\"displayName\":\"abckk\",\"id\":\"124821926\",\"login\":\"ob112\",\"roles\":{\"isStaff\":false},\"version\":2}"
                    var decoded = System.Web.HttpUtility.UrlDecode(cookie.Value);
                    var match   = Regex.Match(decoded, "\"displayName\":\"([^\"]+)\"");
                    if (match.Success)
                    {
                        displayName = match.Groups[1].Value;
                    }
                }
                break;
                }
            }
            info.Username   = displayName ?? name;
            info.IsLoggedIn = !string.IsNullOrEmpty(name);
            return(Task.FromResult <ICurrentUserInfo>(info));
        }
        public override async Task <ICurrentUserInfo> GetCurrentUserInfo(IBrowserProfile browserProfile)
        {
            var cc     = GetCookieContainer(browserProfile);
            var myInfo = await Api.GetMyInfo(_server, cc);

            return(await Task.FromResult(new CurrentUserInfo { Username = myInfo.Nickname, IsLoggedIn = myInfo.IsLogin }));
        }
예제 #7
0
 protected BrowserFactory(IActionRetrier actionRetrier, IBrowserProfile browserProfile, ITimeoutConfiguration timeoutConfiguration, ILocalizedLogger localizedLogger)
 {
     ActionRetrier        = actionRetrier;
     BrowserProfile       = browserProfile;
     TimeoutConfiguration = timeoutConfiguration;
     LocalizedLogger      = localizedLogger;
 }
예제 #8
0
        public static IMyUserInfo GetUserInfoFromCookie(IBrowserProfile browserProfile)
        {
            var cookies = browserProfile.GetCookieCollection("mildom.com");

            if (cookies.Exists(item => item.Name == "user"))
            {
                var    cookie      = cookies.Where(item => item.Name == "user").First();
                var    val         = cookie.Value;
                var    decoded     = System.Web.HttpUtility.UrlDecode(val);
                var    userInfoLow = Tools.Deserialize <Low.UserInfo.RootObject>(decoded);
                string gid;
                if (cookies.Exists(c => c.Name == "gid"))
                {
                    gid = cookies.Where(item => item.Name == "gid").First().Value;
                }
                else
                {
                    gid = "";
                }
                return(new LoggedinUserInfo(userInfoLow, gid));
            }
            else if (cookies.Exists(item => item.Name == "gid"))
            {
                var cookie    = cookies.Where(item => item.Name == "gid").First();
                var gid       = cookie.Value;
                var guestName = Tools.CreateGuestName();
                return(new AnonymousUserInfo(gid, guestName));
            }
            else
            {
                var gid       = "";
                var guestName = Tools.CreateGuestName();
                return(new AnonymousUserInfo(gid, guestName));
            }
        }
        public override async Task <ICurrentUserInfo> GetCurrentUserInfo(IBrowserProfile browserProfile)
        {
            var userInfo = new CurrentUserInfo
            {
            };

            return(await Task.FromResult(userInfo));
        }
예제 #10
0
 public DummyImpl(IDataServer server, string input, IBrowserProfile browserProfile, ILogger logger, IMildomSiteOptions siteOptions, MessageProvider p1)
 {
     _server         = server;
     _input          = input;
     _browserProfile = browserProfile;
     _logger         = logger;
     _siteOptions    = siteOptions;
     _p1             = p1;
     //_p2 = p2;
 }
        public async Task ConnectAsync(string input, IBrowserProfile browserProfile)
        {
            var cc = GetCookieContainer(browserProfile);

            var list = GetCommentProviderInternals(_options, _siteOptions, _userStoreManager, _dataSource, _logger, this, SiteContextGuid);
            var cu   = await GetCurrentUserInfo(browserProfile);

            if (cu.IsLoggedIn)
            {
                foreach (var f in list)
                {
                    var isValid = f.IsValidInput(input);
                    if (isValid)
                    {
                        _internal = f;
                        break;
                    }
                }
            }
            else
            {
                //未ログインでもWebSocket経由なら取れる。
                var f = new NewLiveInternalProvider(_options, _siteOptions, _userStoreManager, _logger, _dataSource)
                {
                    SiteContextGuid = SiteContextGuid,
                };
                var isValid = f.IsValidInput(input);
                if (isValid)
                {
                    _internal = f;
                }
            }
            if (_internal == null)
            {
                //非対応のInput
                //AfterDisconnected();
                return;
            }
            BeforeConnect();
            _internal.MetadataUpdated += (s, e) => MetadataUpdated?.Invoke(s, e);
            _internal.MessageReceived += (s, e) => MessageReceived?.Invoke(s, e);
            try
            {
                await _internal.ConnectAsync(input, cc);
            }
            catch (Exception ex)
            {
                throw new NicoException("", $"input={input},browser={browserProfile.Type}({browserProfile.ProfileName})", ex);
            }
            finally
            {
                AfterDisconnected();
            }
        }
 public DummyImpl(IDataServer server, IUrl url, IBrowserProfile browserProfile, ILogger logger, IPeriscopeSiteOptions siteOptions, MessageProvider p1, MessageUntara messageSetter)
 {
     _server         = server;
     _url            = url;
     _browserProfile = browserProfile;
     _logger         = logger;
     _siteOptions    = siteOptions;
     _p1             = p1;
     _messageSetter  = messageSetter;
     //_p2 = p2;
 }
        protected virtual List <Cookie> GetCookies(IBrowserProfile browserProfile)
        {
            List <Cookie> cookies = null;

            try
            {
                cookies = browserProfile.GetCookieCollection("mixch.tv");
            }
            catch { }
            return(cookies ?? new List <Cookie>());
        }
 public async Task ConnectAsync(string input, IBrowserProfile browserProfile)
 {
     BeforeConnecting();
     try
     {
         await ConnectInternalAsync(input, browserProfile);
     }
     finally
     {
         AfterDisconnected();
     }
 }
        public async Task <ICurrentUserInfo> GetCurrentUserInfo(IBrowserProfile browserProfile)
        {
            var cc = CreateCookieContainer(browserProfile);
            var me = await Api.GetMeAsync(_server, cc);

            return(new CurrentUserInfo
            {
                Username = me.AccountName,
                UserId = me.UserPath,
                IsLoggedIn = !string.IsNullOrEmpty(me.UserPath),
            });
        }
        protected virtual CookieContainer CreateCookieContainer(IBrowserProfile browserProfile)
        {
            var cc = new CookieContainer();//まずCookieContainerのインスタンスを作っておく。仮にCookieの取得で失敗しても/live_chatで"YSC"と"VISITOR_INFO1_LIVE"が取得できる。これらは/service_ajaxでメタデータを取得する際に必須。

            try
            {
                var cookies = browserProfile.GetCookieCollection("youtube.com");
                cc.Add(cookies);
            }
            catch { }
            return(cc);
        }
        public async Task <ICurrentUserInfo> GetCurrentUserInfo(IBrowserProfile browserProfile)
        {
            var    cc      = GetCookieContainer(browserProfile);
            string userId  = null;
            var    cookies = Tools.ExtractCookies(cc);

            foreach (var cookie in cookies)
            {
                if (cookie.Name == "user_session")
                {
                    var match = Regex.Match(cookie.Value, "^user_session_(\\d+)_");
                    if (match.Success)
                    {
                        userId = match.Groups[1].Value;
                    }
                }
            }
            var info = new CurrentUserInfo();

            if (!string.IsNullOrEmpty(userId))
            {
                string displayName = null;
                try
                {
                    displayName = await API.GetDisplayNameFromUserId(_dataSource, userId);
                }
                catch (Exception ex)
                {
                    _logger.LogException(ex, $"user_id={userId}");
                }
                if (string.IsNullOrEmpty(displayName))
                {
                    try
                    {
                        var cauUser = await API.GetNicoCasUserInfo(_dataSource, userId);

                        displayName = cauUser.Name;
                    }
                    catch (Exception ex)
                    {
                        _logger.LogException(ex, $"user_id={userId}");
                    }
                }
                if (string.IsNullOrEmpty(displayName))
                {
                    displayName = "(不明)";
                }
                info.IsLoggedIn = true;
                info.Username   = displayName;
                info.UserId     = userId;
            }
            return(info);
        }
        private async Task ConnectInternalAsync(string input, IBrowserProfile browserProfile)
        {
            if (_ws != null)
            {
                throw new InvalidOperationException("");
            }
            var         cookies = GetCookies(browserProfile);
            LiveUrlInfo liveUrlInfo;

            try
            {
                liveUrlInfo = await Tools.GetLiveId(_dataSource, input);
            }
            catch (InvalidInputException ex)
            {
                _logger.LogException(ex, "無効な入力値", $"input={input}");
                SendSystemInfo("無効な入力値です", InfoType.Error);
                AfterDisconnected();
                return;
            }

            // TODO: 過去のコメントを取得する

            while (!_isExpectedDisconnect)
            {
                _ws           = CreateMixchWebsocket();
                _ws.Received += WebSocket_Received;

                var wsTask = _ws.ReceiveAsync(liveUrlInfo, "", null);

                var tasks = new List <Task> {
                    wsTask
                };

                while (tasks.Count > 0)
                {
                    var t = await Task.WhenAny(tasks);

                    try
                    {
                        await wsTask;
                    }
                    catch (Exception ex)
                    {
                        _logger.LogException(ex);
                    }
                    tasks.Remove(wsTask);
                    SendSystemInfo("wsタスク終了", InfoType.Debug);
                }
                _ws.Received -= WebSocket_Received;
            }
        }
        /// <summary>
        /// Instantiate browser.
        /// </summary>
        /// <param name="webDriver">Instance of Selenium WebDriver for desired web browser.</param>
        public Browser(RemoteWebDriver webDriver)
        {
            Driver = webDriver;
            Logger = AqualityServices.LocalizedLogger;
            LocalizationManager = AqualityServices.Get <ILocalizationManager>();
            browserProfile      = AqualityServices.Get <IBrowserProfile>();
            conditionalWait     = AqualityServices.ConditionalWait;
            var timeoutConfiguration = AqualityServices.Get <ITimeoutConfiguration>();

            SetImplicitWaitTimeout(timeoutConfiguration.Implicit);
            SetPageLoadTimeout(timeoutConfiguration.PageLoad);
            SetScriptTimeout(timeoutConfiguration.Script);
        }
예제 #20
0
        public async Task <ICurrentUserInfo> GetCurrentUserInfo(IBrowserProfile browserProfile)
        {
            var cc = CreateCookieContainer(browserProfile);
            //cookie: lang=ja; device=PC; _ga=GA1.2.942154475.1539615843; __gads=ID=88a3291937a6efee:T=1539615844:S=ALNI_MYcBerafVCLa-gDyYh9JnTfgleU-A; PHPSESSID=o1c7pk8c59qhruldatq57rg320; AWSELB=1DABC705044630618CF68466538D9E569C7CC479D88EB62F0E575B53AB66195021246B2874519AA68BDD9EC54E82BF3783441568103E6D3709DD7C06C7DE99E0A0C470B14E; _gid=GA1.2.1053933165.1541004736; init_dt=20181101023826; GED_PLAYLIST_ACTIVITY=W3sidSI6IkRNZGYiLCJ0c2wiOjE1NDEwMDc1NjEsIm52IjoxLCJ1cHQiOjE1NDEwMDc1MDYsImx0IjoxNTQxMDA3NTYxfV0.; random=RDMYEFRDLLPBQZJSRBUF; token=7bb004826a2d9b00d4bc6e3d933c88757e61b1c2; uuid=7A4E34CD-F8DD-3748-5A4A-3B2FD8D03DFC; access_token=1a9b0308-f56a-479d-bb63-43469ec90c1a; ci_session=CzIJaQI0Aj0AIl0sWTZRZVFgADxUdVBzDWkGdFF3BzBSaQE%2BV15RPVpmAXkIMg95Xj0AMVA3Aj1WdVdlAzIBYQsyUWNbNgVsVjRSNFcxUGELagkxAjUCNABgXWpZaVEyUWMAM1QyUGYNbgY0UTUHbVI3ATNXNVE2WjoBeQgyD3lePQAzUDYCPVZ1Vz0DYQEiC35RD1tvBThWdlJqV3dQPAsnCSoCIQI8ADBdZVk9UWFRZAA3VGdQNw05BjFRMQduUj0BI1c7UWVaMgFhCCsPY153AF1QZAJjVjNXIwNlASILeVFyWzUFKFY4UjJXMlBvC3EJZQIyAikAaF1mWT5RelFiADdUYVAuDT4GPlEmB2JSdQFqVzhRblogAS4Ieg9vXnUAXVBhAmZWI1cwAyIBagt5UWpbPgVhViBSIVc6UCYLaQlrAjkCJQArXTpZb1EsUSUAdVQyUHINLgY8UWUHY1IyAWpXelEnWjgBagg5DzBeJQB3UHYCYlYlVw4DdAE%2BC2FRNVtgBXlWOVJwVztQZgthCWkCIQI3AGBdbFk%2BUWJRYwBgVDVQZQ09BjRRPQdoUjABYlc5UWVaZAFjCGgPaV41ADdQMgI%2BVjNXYQM1ATcLblFnW28FeVY5UnBXO1BkC2IJaQIhAnMAPF0tWWFRPVE%2BAGdUO1BfDWUGY1EmB2JSdQFqVzJRYlo4AXkIPg9LXjMAR1A2AjNWFFcVAy0BFwsyURRbSgV2VjFSNFc1UG0LfglmAkICMwAYXXJZP1EWUWIAQFQTUDgNSAY3UTcHHVJAARNXI1FvWnEBYQg4DztePQAgUHcCYlY0VykDdQEiC29RIltRBTJWZlIhVzpQJgtpCWsCOQIlAGtdb1k4UWxRZwAyVGBQMQ0uBjxRdwdjUjcBZVc7UXZabQErCGwPZF51AGdQZgJYViJXIgNlASMLVVE5W2oFeVY5UnBXO1BjC2kJcQIyAjQAbl1qWTVRYFFyAD1UKlBzDTYGP1E%2BB3tSbwEjV15ROFptATwIYA9kXiUAOVBnAj1WZldqA3MBaws7UWJbNAV5Vm1Sc1dkUDsLIQk2AmACWAAsXSxZaVEmUXIAPVQ2UDoNPQY9UX8HKlI8AWFXMFFuWiABLgh6D29edQBdUHYCc1Y2VyUDdQEiCyhRa1t9BWFWNlI5VyNQNwsyCT0CZAIlAGJdIllx
            var me = await API.GetMeAsync(_dataSource, cc);

            return(new CurrentUserInfo
            {
                IsLoggedIn = !string.IsNullOrEmpty(me.UserPath),
                UserId = me.UserPath,
                Username = me.DisplayName,
            });
        }
        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();
            }
        }
        public override async Task <ICurrentUserInfo> GetCurrentUserInfo(IBrowserProfile browserProfile)
        {
            var cc = GetCookieContainer(browserProfile);

            try
            {
                var myInfo = await Api.GetMyInfo(_server, cc);

                return(await Task.FromResult(new CurrentUserInfo { Username = myInfo.Nickname, IsLoggedIn = myInfo.IsLogin }));
            }
            catch (NotLoggedInException)
            {
                return(await Task.FromResult(new CurrentUserInfo { Username = "******", IsLoggedIn = false }));
            }
        }
예제 #23
0
        public async Task <ICurrentUserInfo> GetCurrentUserInfo(IBrowserProfile browserProfile)
        {
            var cc      = GetCookieContainer(browserProfile);
            var cookies = Tools.ExtractCookies(cc);
            var me      = await Api.GetMyAsync(_server, cookies);

            var info = new CurrentUserInfo
            {
                IsLoggedIn = me != null ? !string.IsNullOrEmpty(me.UserId) : false,
                Username   = me?.DisplayName,
                UserId     = me?.UserId
            };

            return(info);
        }
        protected virtual CookieContainer CreateCookieContainer(IBrowserProfile browserProfile)
        {
            var cc = new CookieContainer();

            try
            {
                var cookies = browserProfile.GetCookieCollection("whowatch.tv");
                foreach (var cookie in cookies)
                {
                    cc.Add(cookie);
                }
            }
            catch { }
            return(cc);
        }
        public override async Task ConnectAsync(string input, IBrowserProfile browserProfile)
        {
            BeforeConnect();
            var nicoInput = Tools.ParseInput(input);

            if (nicoInput is InvalidInput invalidInput)
            {
                SendSystemInfo("未対応の形式のURLが入力されました", InfoType.Error);
                AfterDisconnected();
                return;
            }
            _isFirstConnection = true;
reload:
            _isDisconnectedExpected = false;
            _disconnectCts          = new CancellationTokenSource();
            try
            {
                await ConnectInternalAsync(nicoInput, browserProfile);
            }
            catch (ApiGetCommunityLivesException ex)
            {
                _isDisconnectedExpected = true;
                SendSystemInfo("コミュニティの配信状況の取得に失敗しました", InfoType.Error);
                _logger.LogException(ex, "", $"input:{input}, browser:{browserProfile.Type}");
            }
            catch (SpecChangedException ex)
            {
                _isDisconnectedExpected = true;
                SendSystemInfo("サイトの仕様変更があったためコメント取得を継続できません", InfoType.Error);
                _logger.LogException(ex, "", $"input:{input}, browser:{browserProfile.Type}");
            }
            catch (Exception ex)
            {
                _logger.LogException(ex, "", $"input:{input}, browser:{browserProfile.Type}");
            }
            _dataProps = null;
            if (!_isDisconnectedExpected)
            {
                _isFirstConnection = false;
                goto reload;
            }
            var m = new NicoDisconnected("");
            var s = new DisconnectedMessageMetadata(m, _options, _siteOptions);
            var c = new NicoMessageContext(m, s, new NicoMessageMethods());

            RaiseMessageReceived(c);
            AfterDisconnected();
        }
        private async Task ConnectInternalAsync(string input, IBrowserProfile browserProfile)
        {
            var roomName = GetRoomNameFromInput(input);

            if (string.IsNullOrEmpty(roomName))
            {
                throw new Exception("invalid input");
            }
            var livePageUrl  = "https://www.showroom-live.com/" + roomName;
            var livePageHtml = await _server.GetAsync(livePageUrl);

            var match = Regex.Match(livePageHtml, "room_id=(\\d+)");

            if (!match.Success)
            {
                throw new Exception("room_idが無い");
            }
            var room_id = match.Groups[1].Value;

            var messageProvider = new MessageProvider(new Websocket(), _logger);

            messageProvider.Received += MessageProvider_Received;
            var connector = new PeriscopeConnector(_server, room_id, messageProvider, _logger);
            var me        = new MessageUntara();

            me.SystemInfoReiceved += Me_SystemInfoReiceved;
            _autoReconnector       = new AutoReconnector(connector, me);
            await _autoReconnector.AutoConnect();

            me.SystemInfoReiceved    -= Me_SystemInfoReiceved;
            messageProvider.Received -= MessageProvider_Received;
            //var liveInfo = await Api.GetLiveInfo(_server, room_id);
            //if(liveInfo.LiveStatus == 1)
            //{
            //    //放送終了?
            //    return;
            //}
            //_pingTimer.Enabled = true;
            //try
            //{
            //    await _messageProvider.ReceiveAsync(liveInfo.BcsvrHost, liveInfo.BcsvrKey);
            //}
            //finally
            //{
            //    _pingTimer.Enabled = false;
            //}
            //return;
        }
 public override async Task ConnectAsync(string input, IBrowserProfile browserProfile)
 {
     BeforeConnect();
     try
     {
         await ConnectInternalAsync(input, browserProfile);
     }
     catch (Exception ex)
     {
         _logger.LogException(ex, "", $"input={input}");
     }
     finally
     {
         AfterDisconnected();
     }
 }
예제 #28
0
        private static IWebDriver CreateDriver(IBrowserProfile browserProfile)
        {
            Logger.Info($"{browserProfile.BrowserName} driver initialization");
            switch (browserProfile.BrowserName)
            {
            case BrowserName.Chrome:
                SetUpDriver(new ChromeConfig(), browserProfile.DriverSettings);
                return(new ChromeDriver((ChromeOptions)browserProfile.DriverSettings.DriverOptions));

            case BrowserName.Firefox:
                SetUpDriver(new FirefoxConfig(), browserProfile.DriverSettings);
                return(new FirefoxDriver((FirefoxOptions)browserProfile.DriverSettings.DriverOptions));

            default:
                throw new ArgumentOutOfRangeException($"Browser {browserProfile.BrowserName} is not supported.");
            }
        }
예제 #29
0
        protected virtual CookieContainer GetCookieContainer(IBrowserProfile browserProfile)
        {
            var cc = new CookieContainer();

            try
            {
                var cookies = browserProfile.GetCookieCollection("live.line.me");
                foreach (var cookie in cookies)
                {
                    cc.Add(cookie);
                }
            }
            catch (Exception ex)
            {
                _logger.LogException(ex);
            }
            return(cc);
        }
        public async Task <ICurrentUserInfo> GetCurrentUserInfo(IBrowserProfile browserProfile)
        {
            // FIXME: コメビュでhttpsアクセスするとWeb版で開いているライブ視聴画面でアイテムの送信ができなくなる。
            // リロードで直るので何らかのセッション不整合が起きている模様。
            // 今現在はユーザー情報を使っていないのでログイン情報の取得を停止する

            // var cc = CreateCookieContainer(browserProfile);
            // var me = await API.GetMeAsync(_dataSource, cc);
            // return new CurrentUserInfo
            // {
            //     IsLoggedIn = !string.IsNullOrEmpty(me.UserId),
            //     UserId = me.UserId,
            //     Username = me.DisplayName,
            // };
            //
            return(new CurrentUserInfo {
            });
        }