Пример #1
0
        public static void Report(SessionPreference preference, ChatSession session, int id, TimeSpan idleTimeElapsed, TimeSpan cameraTimeElapsed, TimeSpan talkTimeElapsed, int cameraCount)
        {
            string[]       scopes          = { SheetsService.Scope.Spreadsheets };
            var            applicationName = "Data Poster";
            UserCredential credential;

            using (var stream =
                       new FileStream("client.json", FileMode.Open, FileAccess.Read))
            {
                string credPath = Environment.CurrentDirectory;
                credPath = Path.Combine(credPath, "data.json");

                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
            }

            // Create Google Sheets API service.
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName       = applicationName,
            });

            IList <IList <Object> > objNeRecords = GenerateData(preference, session, id, idleTimeElapsed, cameraTimeElapsed, talkTimeElapsed, cameraCount);

            if (objNeRecords == null)
            {
                return;
            }

            string spreadsheetId = "";
            string list          = "";

            switch (preference.Name)
            {
            case "User Perspective V2":
                spreadsheetId = OffTableId;
                list          = OffTableListMod1V2;
                break;

            case "Default v2":
                spreadsheetId = OffTableId;
                list          = OffTableListMod24v7;
                break;

            case "Unfiltered v2":
                spreadsheetId = OffTableId;
                list          = SecondTableListMod3v7;
                break;
            }

            UpdateGoogleSheetInBatch(objNeRecords, spreadsheetId, $"{list}!A:AA", service);
        }
Пример #2
0
        private static IList <IList <Object> > GenerateData(SessionPreference preference, ChatSession session, int id, TimeSpan idleTimeElapsed, TimeSpan cameraTimeElapsed, TimeSpan talkTimeElapsed, int cameraCount)
        {
            switch (preference.Name)
            {
            case "Default v2":
            case "User Perspective V2":
            case "Unfiltered v2":
                return(GenerateOffTableData(preference, session, idleTimeElapsed, cameraTimeElapsed,
                                            talkTimeElapsed, cameraCount));
            }

            return(null);
        }
Пример #3
0
        private static IList <IList <Object> > GenerateData(SessionPreference preference, ChatSession session, int id, TimeSpan idleTimeElapsed, TimeSpan cameraTimeElapsed, TimeSpan talkTimeElapsed, int cameraCount)
        {
            switch (preference.Name)
            {
            case "Default (disabled)":
            case "Default (enabled)":
            case "Default (experimental)":
            case "Default (experimental highscore)":
            case "Default (without random)":
            case "User Perspective (Disabled)":
            case "User Perspective (Enabled)":
            case "User Perspective (experimental)":
            case "User Perspective (experimental highscore)":
            case "Unfiltered":
                return(GenerateOffTableData(preference, session, idleTimeElapsed, cameraTimeElapsed,
                                            talkTimeElapsed, cameraCount));
            }

            return(null);
        }
Пример #4
0
        private static IList <IList <object> > GenerateOffTableData(SessionPreference preference, ChatSession session, TimeSpan idleTimeElapsed, TimeSpan cameraTimeElapsed, TimeSpan talkTimeElapsed, int cameraCount)
        {
            List <IList <Object> > objNewRecords = new List <IList <Object> >();
            IList <Object>         obj           = new List <Object>();

            obj.Add(session.DateStart.ToString("dd.MM.yyyy"));
            obj.Add(preference.Mod);
            if (session.DateEnd.HasValue)
            {
                obj.Add($"{session.DateStart:HH}-{session.DateEnd:HH}");
            }
            else
            {
                obj.Add($"{session.DateStart:HH}-{session.DateStart:HH}");
            }

            var inappropriate       = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Inappropriate);
            var hiddenInappropriate = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.HiddenInappropriate);
            var nobody    = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Nobody);
            var blanket   = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Blanket);
            var cp        = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Cp);
            var male      = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Male);
            var female    = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Female);
            var onePlus   = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.OnePlus);
            var performer = session.ChatConnections.Count(x => x.Result == ChatConnectionResultEnum.Performer);
            var spam      = session.ChatConnections.Count(x =>
                                                          x.Result == ChatConnectionResultEnum.Spam1 ||
                                                          x.Result == ChatConnectionResultEnum.Spam2 ||
                                                          x.Result == ChatConnectionResultEnum.Spam3
                                                          );

            obj.Add(inappropriate);
            obj.Add(hiddenInappropriate);
            obj.Add(nobody);
            obj.Add(blanket);
            obj.Add(cp);
            obj.Add(male);
            obj.Add(female);
            obj.Add(onePlus);
            obj.Add(performer);
            obj.Add(spam);
            obj.Add("session link");
            obj.Add("");
            obj.Add("");
            obj.Add("");

            var connections = inappropriate + hiddenInappropriate + nobody + blanket + cp + male + female + onePlus +
                              performer;
            var lowQualityCount = inappropriate + hiddenInappropriate + nobody + blanket + cp;
            var lowQuality      = connections == 0 ? 0 : Convert.ToDouble(lowQualityCount) / Convert.ToDouble(connections);
            var percentExplicit = connections == 0 ? 0 : Convert.ToDouble(inappropriate) / Convert.ToDouble(connections);

            obj.Add(percentExplicit);
            obj.Add(lowQuality);
            obj.Add(connections);

            obj.Add(idleTimeElapsed);
            var avgIdle = connections < 1 ? idleTimeElapsed : TimeSpan.FromMilliseconds(idleTimeElapsed.TotalMilliseconds / (connections - 1));

            obj.Add(avgIdle);

            obj.Add(talkTimeElapsed);
            var avgTalk = connections == 0 ? talkTimeElapsed : TimeSpan.FromMilliseconds(talkTimeElapsed.TotalMilliseconds / connections);

            obj.Add(avgTalk);

            obj.Add(cameraCount);
            obj.Add(cameraTimeElapsed);
            var avgCamera = cameraCount == 0 ? cameraTimeElapsed :  TimeSpan.FromMilliseconds(cameraTimeElapsed.TotalMilliseconds / cameraCount);

            obj.Add(avgCamera);

            objNewRecords.Add(obj);
            return(objNewRecords);
        }
        public BrowserController(SessionPreference sessionPreference, Logger logger)
        {
            this._sessionPreference = sessionPreference;
            this._logger            = logger;

            if (!Cef.IsInitialized)
            {
                var cefSettings = new CefSettings
                {
                    BrowserSubprocessPath = Path.Combine(
                        AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
                        Environment.Is64BitProcess ? "x64" : "x86",
                        "CefSharp.BrowserSubprocess.exe")
                };
                cefSettings.CefCommandLineArgs.Add("enable-media-stream", "1");
                if (File.Exists(Path.Combine(Environment.CurrentDirectory, "video.y4m")))
                {
                    cefSettings.CefCommandLineArgs.Add("use-fake-device-for-media-stream");
                    cefSettings.CefCommandLineArgs.Add("--use-file-for-fake-video-capture", "video.y4m");
                }

                Cef.Initialize(cefSettings, performDependencyCheck: false, browserProcessHandler: null);
            }

            this._isv2 = this._sessionPreference.Name.ToLower().Contains("v2");
            if (this._isv2)
            {
                this._url = "https://chatroulette.com";
            }
            else
            {
                this._url = "https://chatroulette.com";
            }

            if (this._sessionPreference.Mod != "-1")
            {
                var m = this._sessionPreference.Mod;
                if (_isv2)
                {
                    m = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODUxOTM5ODYsInZhbHVlIjoiLT1TaDNyMWZmPS0ifQ.YM7YIilD-mhLmqIrl8KqcP0faV09MsGEiBDAqAB28fs";
                }
                else
                {
                    if (this._sessionPreference.Mod != "0")
                    {
                        if (this._sessionPreference.WithBan)
                        {
                            m = "0";
                        }
                        else
                        {
                            Cef.GetGlobalCookieManager().SetCookie(this._url,
                                                                   new Cookie()
                            {
                                Path = "/", Domain = this._url.Replace("https://", ""), Name = "counter", Value = this._sessionPreference.Mod
                            });
                            m = "-100";
                        }
                    }
                }
                this._logger.Trace("mod for current session: " + m);
                Cef.GetGlobalCookieManager().SetCookie(this._url,
                                                       new Cookie()
                {
                    Path = "/", Domain = this._url.Replace("https://", ""), Name = "mod", Value = m
                });
            }

            this._browser = new ChromiumWebBrowser(this._url);
            this._browser.ConsoleMessage +=
                (sender, args) =>
            {
                if (args.Message == "Couldn't fetch stats due to GetStats is not possible: OT.Subscriber is not connected cannot getStats")
                {
                    return;
                }
                this._logger.Trace($"Browser console message: {args.Message}");
                if (args.Message.Contains("partner banned by moderator"))
                {
                    this.BrowserBanState = true;
                }
                if (args.Message.Contains("Stream started"))
                {
                    this.BrowserBanState = false;
                }

                if (args.Message.Contains("Search started."))
                {
                    this.Status = Status.Wait;
                }
                if (args.Message.Contains("Client is now ready to begin."))
                {
                    this.Status = Status.EnableCamera;
                }
                if (args.Message.Contains("Setup publisher and camera turned on"))
                {
                    this.Status = Status.Start;
                }
                if (args.Message.Contains("Setup subscriber - success"))
                {
                    this.Status = Status.PartnerConnected;
                }
                if (args.Message.Contains("partner skipped") || args.Message.Contains("partner banned by moderator"))
                {
                    this.Status = Status.PutResult;
                }
            };

            this._browser.LoadingStateChanged += this.ChromeBrowserOnLoadingStateChanged;
            if (this._isv2)
            {
                var backgroundWorker = new BackgroundWorker();
                backgroundWorker.DoWork             += BackgroundWorkerOnDoWork;
                backgroundWorker.RunWorkerCompleted += BackgroundWorkerOnRunWorkerCompleted;
                backgroundWorker.RunWorkerAsync();
            }
        }