示例#1
0
        private static void Thread_check_End_Broadcasting(object i_connect_)
        {
            i_connect C          = (i_connect)i_connect_;
            int       endtimeout = 2;
            bool      is_end     = false;

            if (!Ldriver.Has_int_key(C.No)) //현재 해당 연결이 없거나 삭제되었으면 확인하지 않는다.
            {
                return;
            }

            IWebDriver dr_ = (IWebDriver)Ldriver.Select_key(C.No);

            while (endtimeout-- > 0)
            {
                try
                {
                    IWebElement nn   = dr_.FindElement(By.Id("layerAirOff"));
                    string      ddds = nn.Text;
                    if (ddds.Contains("방송을 종료하였습니다"))
                    {
                        is_end = true;
                        break;
                    }
                }
                catch { }
                Thread.Sleep(1000);
            }

            if (is_end)
            {
                TefreecaUnit_interface.Add_Command( //상태를 업데이트 하도록 한다.
                    Command_Client.Updated_Connection,
                    new i_Updated_Connection(C.No, i_Updated_Connection_Type.State_Connect, State_Connect.Failure));

                TefreecaUnit_interface.Add_Response(Command_Server.End_Broadcasting, C.Order_No);
                Console.WriteLine("Ended Broadcasting. ");
            }
        }
示例#2
0
        private static void StartServer(String hostName, UInt16 hostPort, bool noneproxy, bool tester_)
        {
            init_Server();
            TC = null;
            TC = new TefreecaUnit_interface(noneproxy, tester_);
            while (true)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Connecting Server [{0}:{1}]", hostName, hostPort);

                TC.ConnectToServer(hostName, hostPort);
                if (!TC.is_connected())
                {
                    Console.WriteLine("Failure Connect, Reconnecting..");
                    continue;
                }
                else
                {
                    TefreecaUnit_interface.Tefreeca_client_event += Eventer_Tefreeca_client_event;
                    break;
                }
            }
        }
示例#3
0
        private static void Thread__Enter_Afreeca_Room(object connection_)
        {
            i_connect C = (i_connect)connection_;

            if (Enter_Afreeca_Room_to_Mobile() && (!tester)) //테스터면 절대 안됨.
            {
                C.URL = C.URL.Replace("play.afreecatv.com", "m.afreecatv.com/#/player");
            }
            try
            {
                int  timeout_  = timeout;
                bool connected = false;

                if (C.Proxy == "")
                {
                    Console.WriteLine("ERROR: Can't connect. \r\n Not set proxy Server.");
                    return;
                }

                var chromeOptions = new ChromeOptions();
                if (!none_proxy)
                {
                    string server = Convert.ToString(C.Proxy);
                    var    proxy  = new Proxy();
                    proxy.HttpProxy     = server;
                    chromeOptions.Proxy = proxy;
                }
                //시크릿 모드로.. 섹션 분리
                chromeOptions.AddArgument("--incognito");
                chromeOptions.AddArgument("--silent");
                IWebDriver Driver = new ChromeDriver(@".\", chromeOptions);
                lock (Ldriver)
                {
                    Ldriver.Insert(C.No, Driver);
                }
                Driver.Navigate().GoToUrl(C.URL);

                if (C.URL.Contains("m.afreecatv.com")) //모바일 =========================================================
                {
                    while (true)
                    {
                        Console.Write("X{0}.", timeout_);
                        try
                        {
                            IWebElement btn_normal_q  = WebDriverExtensions.FindElement(Driver, By.ClassName("low"), 5);
                            IWebElement startBtnGroup = WebDriverExtensions.FindElement(Driver, By.Id("startBtnGroup"), 5);
                            //startBtnGroup
                            if (btn_normal_q != null)
                            {
                                string disp = startBtnGroup.GetCssValue("display");
                                if (disp.Contains("none")) //없으면 접속된거
                                {
                                    ReadOnlyCollection <IWebElement> in_broadcasting = WebDriverExtensions.FindElements(Driver, By.TagName("dd"), 5);

                                    bool is_inbroad = false;
                                    foreach (IWebElement ele in in_broadcasting)
                                    {
                                        if (is_방송에_입장하셨습니다(ele.Text))
                                        {
                                            is_inbroad = true;
                                            break;
                                        }
                                    }

                                    if (is_inbroad)
                                    {
                                        connected = true;

                                        TefreecaUnit_interface.Add_Command( //상태를 업데이트 하도록 한다.
                                            Command_Client.Updated_Connection,
                                            new i_Updated_Connection(C.No, i_Updated_Connection_Type.State_Connect, State_Connect.Connected));

                                        process_do_Low(); //모든 크롬 창 최소화.
                                        break;
                                    }
                                }
                                else //있으면 접속안된거..
                                {
                                    Thread.Sleep(2000);
                                    WebDriverExtensions.element_click(Driver, btn_normal_q);
                                }
                            }
                        }
                        catch
                        { }
                        if (timeout_-- <= 0) //0이하면 탈출..
                        {
                            break;
                        }
                        Thread.Sleep(1000);
                    }
                    if (!connected)
                    {
                        if (!none_proxy && timeout > 100)
                        {
                            TefreecaUnit_interface.Add_Command(Command_Client.Change_Proxy, null);
                        }
                        else
                        {
                            if (timeout <= 100)
                            {
                                timeout += 20;
                            }
                            TefreecaUnit_interface.Add_Command( //상태를 업데이트 하도록 한다.
                                Command_Client.Updated_Connection,
                                new i_Updated_Connection(C.No, i_Updated_Connection_Type.State_Connect, State_Connect.Failure));
                        }
                    }
                }    //============================================================================================
                else //pc
                {
                    while (true)
                    {
                        try
                        {
                            Console.Write("X{0}.", timeout_);
                            IWebElement nn = Driver.FindElement(By.XPath("//*[@id=\"broad_info\"]/dl/dt"));
                            if (!is_방송을_불러오고_있습니다(nn.Text.ToString())) //연결되면
                            {
                                connected = true;

                                TefreecaUnit_interface.Add_Command( //상태를 업데이트 하도록 한다.
                                    Command_Client.Updated_Connection,
                                    new i_Updated_Connection(C.No, i_Updated_Connection_Type.State_Connect, State_Connect.Connected));

                                process_do_Low(); //모든 크롬 창 최소화.

                                break;
                            }
                        }
                        catch { }


                        if (SideBreak_ConnectNo != -1) //사이드 브레이크 발동
                        {
                            //if (SideBreak_ConnectNo == C.No)
                            //{
                            SideBreak_ConnectNo = -1;
                            break;
                            //}
                        }

                        if (timeout_-- <= 0) //0이하면 탈출..
                        {
                            break;
                        }
                        Thread.Sleep(1000);

                        // 접속을 검사함.. 계속 계속.. 다 될때 까지 다되면 끗.
                    }
                    if (!connected)
                    {
                        if (!none_proxy && timeout > 100)
                        {
                            TefreecaUnit_interface.Add_Command(Command_Client.Change_Proxy, null);
                        }
                        else
                        {
                            if (timeout <= 100)
                            {
                                timeout += 20;
                            }
                            TefreecaUnit_interface.Add_Command( //상태를 업데이트 하도록 한다.
                                Command_Client.Updated_Connection,
                                new i_Updated_Connection(C.No, i_Updated_Connection_Type.State_Connect, State_Connect.Failure));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("AFREECA ERROR: " + ex.ToString());
                TefreecaUnit_interface.Add_Command(                                                                  //상태를 업데이트 하도록 한다.
                    Command_Client.Updated_Connection,
                    new i_Updated_Connection(C.No, i_Updated_Connection_Type.State_Connect, State_Connect.Failure)); //연결 실패로 바꾼다.
            }
        }
示例#4
0
        public static void Eventer_Tefreeca_client_event(object sender, EventArgs e)
        {
            try
            {
                Tefreeca_client_EventArgs RecieveEventArg = e as Tefreeca_client_EventArgs;
                if (RecieveEventArg == null)
                {
                    return;
                }
                Unit_Event_Type type = RecieveEventArg.type;

                switch (type)
                {
                case Unit_Event_Type.Account_Check_Login:
                {
                    int connect_no = RecieveEventArg.data_int;

                    //실질적인 로그인 시도.
                    if (!Ldriver.Has_int_key(connect_no))         //드라이브가 없으면 바로 삭제한것으로 간주
                    {
                        return;
                    }
                    IWebDriver drv = (IWebDriver)Ldriver.Select_key(connect_no);

                    if (login_check(drv))
                    {
                        i_Updated_Connection_Account iua = new i_Updated_Connection_Account();
                        iua.Connect_No = connect_no;
                        iua.State      = State_Account_on_connected.Logged_Account;
                        TefreecaUnit_interface.Add_Command(Command_Client.Updated_Connection_Account, iua);
                    }
                    else         //로긴 상태가 아니라면, 로긴을 해야하는데.. 그래서 다시 setting 로 바꿔서 로긴시도하게끔 만듬.
                    {
                        i_Updated_Connection_Account iua = new i_Updated_Connection_Account();
                        iua.Connect_No = connect_no;
                        iua.State      = State_Account_on_connected.Setting;
                        TefreecaUnit_interface.Add_Command(Command_Client.Updated_Connection_Account, iua);
                    }
                }
                break;

                case Unit_Event_Type.Account_Login:     //ㄹ
                {
                    i_Account_Set iac = (i_Account_Set)RecieveEventArg.Data_object_list[0];

                    //실질적인 로그인 시도.
                    if (!Ldriver.Has_int_key(iac.Connect_No))         //드라이브가 없으면 바로 삭제한것으로 간주
                    {
                        return;
                    }
                    IWebDriver drv = (IWebDriver)Ldriver.Select_key(iac.Connect_No);

                    login_afreeca(drv, iac.ID, iac.PW);         //여기선 로긴만 한다.
                }
                break;

                case Unit_Event_Type.Check_End_broadcast:     //방송이 진행중에 종료되었는지 확인하는 코드
                {
                    foreach (i_connect C in RecieveEventArg.Data_object_list)
                    {
                        Thread th = new Thread(new ParameterizedThreadStart(Thread_check_End_Broadcasting));
                        th.Start(C);         //웹브라우저 객체를 매게변수로 넘긴다.
                    }
                }
                break;

                case Unit_Event_Type.Disconnect_All:
                {
                    Shutdown_ALL();
                }
                break;

                case Unit_Event_Type.Disconnect_connect:    //하나의 연결 해제.
                {
                    i_connect C = (i_connect)RecieveEventArg.Data_object_list[0];

                    if (!Ldriver.Has_int_key(C.No))         //드라이브가 없으면 바로 삭제한것으로 간주
                    {
                        TefreecaUnit_interface.Add_Command( //상태를 업데이트 하도록 한다.
                            Command_Client.Updated_Connection,
                            new i_Updated_Connection(C.No, i_Updated_Connection_Type.State_Connect, State_Connect.Close));
                        return;
                    }

                    TefreecaUnit_interface.Add_Command(         //상태를 업데이트 하도록 한다.
                        Command_Client.Updated_Connection,
                        new i_Updated_Connection(C.No, i_Updated_Connection_Type.State_Connect, State_Connect.Closing));

                    Thread th = new Thread(new ParameterizedThreadStart(Close_Driver));
                    th.Start(Ldriver.Select_key(C.No));         //웹브라우저 객체를 매게변수로 넘긴다.

                    th.Join();

                    TefreecaUnit_interface.Add_Command(         //상태를 업데이트 하도록 한다.
                        Command_Client.Updated_Connection,
                        new i_Updated_Connection(C.No, i_Updated_Connection_Type.State_Connect, State_Connect.Close));
                    try
                    {
                        Ldriver.Remove(C.No);
                    }
                    catch
                    {
                        Console.WriteLine("Already remove webdriver : {0}", C.No);
                    }
                }
                break;

                case Unit_Event_Type.Order_Connect:
                {
                    i_connect C = JsonConvert.DeserializeObject <i_connect>(RecieveEventArg.data_string);
                    Command_Connect(C);
                }
                break;

                case Unit_Event_Type.Order_Disconnect:
                {
                }
                break;

                case Unit_Event_Type.Connect_sideBreak:
                {
                    SideBreak_ConnectNo = RecieveEventArg.data_int;
                }
                break;

                default:
                { }
                break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error : {0}", ex.ToString());
                //throw;
            }
        }