Esempio n. 1
0
 public void SetupNotifier(object sender, EventArgs e)
 {
     reporter = new ActivityReporter(((WinWindow)Frame).Form);
     ((WinWindow)Frame).Form.KeyPreview = true;
     //THIS IS NOT WORKING: MainWindow is null when this event is fired
     reporter.Activity += Application.MainWindow.GetController <IdleController>().ResetTimer;
 }
Esempio n. 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StampLocator" /> class.
 /// </summary>
 /// <param name="fullFilePathForRegionStampMap">The full file path for region stamp map.</param>
 /// <param name="regionStampMap">The region stamp map.</param>
 /// <param name="httpClient">The HTTP client.</param>
 /// <param name="stampLocatorUrl">The stamp locator URL to retrieve the region stamp map.</param>
 /// <param name="activityReporter">The activity reporter.</param>
 /// <exception cref="MetricsClientException">The region stamp map failed to initialize or is empty.</exception>
 private StampLocator(string fullFilePathForRegionStampMap, Dictionary <string, string> regionStampMap, HttpClient httpClient, Uri stampLocatorUrl, ActivityReporter activityReporter)
 {
     this.fullFilePathForRegionStampMap = fullFilePathForRegionStampMap;
     this.regionStampMap   = regionStampMap;
     this.httpClient       = httpClient;
     this.stampLocatorUrl  = stampLocatorUrl;
     this.activityReporter = activityReporter;
 }
        public void StartReporterThread()
        {
            var settings = new Settings(new SettingsReader("ActivityLogger.ini"));

            ActivityReport  = new ActivityReport();
            _activityLogger = ActivityLogger.Instance(ActivityReport, settings);

            var mouseClickLogger   = MouseClickLogger.Instance();
            var mouseClickReporter = MouseClickReporter.Instance(_activityLogger);

            mouseClickReporter.Subscribe(mouseClickLogger);

            var keyLogger   = KeyLogger.Instance();
            var keyReporter = KeyReporter.Instance(_activityLogger);

            keyReporter.Subscribe(keyLogger);

            Task.Factory.StartNew(() =>
            {
                var activityReporter = new ActivityReporter(_activityReceiver);
                activityReporter.Subscribe(_activityLogger);

                var mouseLogger   = new MouseLogger();
                var mouseReporter = new MouseReporter(_activityLogger);
                mouseReporter.Subscribe(mouseLogger);

                var processLogger   = new ProcessLogger();
                var processReporter = new ProcessReporter(_activityLogger);
                processReporter.Subscribe(processLogger);

                var timeLogger   = new TimeLogger();
                var timeReporter = new TimeReporter(_activityLogger);
                timeReporter.Subscribe(timeLogger);

                var activityTypeLogger   = new ActivityTypeLogger(settings);
                var activityTypeReporter = new ActivityTypeReporter(_activityLogger);
                activityTypeReporter.Subscribe(activityTypeLogger);

                while (true)
                {
                    Thread.Sleep(1000);

                    // KeyLogger & MouseClickLogger will log when keystrokes/clicks are
                    // recorded, so no need to tell it to log here.

                    mouseLogger.Log();
                    processLogger.Log();
                    timeLogger.Log();

                    activityTypeLogger.DetermineActivityType(
                        processReporter.ProcessReport, mouseReporter.MouseReport,
                        MouseClickReporter.Instance().MouseClickReport, KeyReporter.Instance().KeyReport);
                    activityTypeLogger.Log();

                    _activityLogger.Log();
                }
            });
        }
Esempio n. 4
0
        /// <summary>
        /// Creates the instance asynchronously.
        /// </summary>
        /// <param name="folderToCacheRegionStampMap">The folder to cache region stamp map.</param>
        /// <param name="httpClient">The HTTP client.</param>
        /// <param name="stampLocatorUrl">The stamp locator URL.</param>
        /// <param name="activityReporter">The activity reporter.</param>
        /// <returns>
        /// An instance of <see cref="StampLocator" />.
        /// </returns>
        internal static async Task <IStampLocator> CreateInstanceAsync(
            string folderToCacheRegionStampMap,
            HttpClient httpClient,
            Uri stampLocatorUrl,
            ActivityReporter activityReporter)
        {
            string fullFilePathForRegionStampMap       = null;
            Dictionary <string, string> regionStampMap = null;

            if (!string.IsNullOrWhiteSpace(folderToCacheRegionStampMap) && Directory.Exists(folderToCacheRegionStampMap))
            {
                fullFilePathForRegionStampMap = Path.Combine(folderToCacheRegionStampMap, FileNameForRegionStampMap);
                if (File.Exists(fullFilePathForRegionStampMap))
                {
                    string fileContent = null;
                    activityReporter(StampLocatorActivity.StartToLoadRegionStampMapFromLocalFile, false, $"File name:{fullFilePathForRegionStampMap}.");
                    try
                    {
                        fileContent    = File.ReadAllText(fullFilePathForRegionStampMap);
                        regionStampMap = CreateNewRegionStampMap(fileContent);
                        activityReporter(StampLocatorActivity.FinishedLoadingRegionStampMapFromLocalFile, false, $"fileContent:{fileContent}, regionStampMap:{JsonConvert.SerializeObject(regionStampMap)}.");
                    }
                    catch (Exception e)
                    {
                        var errorMessage =
                            $"Failed to create the region stamp map from local file. FilePath:{fullFilePathForRegionStampMap}, FileContent:{fileContent}, Exception:{e}.";
                        activityReporter(StampLocatorActivity.FailedToLoadRegionStampMapFromLocalFile, true, errorMessage);
                    }
                }
                else
                {
                    activityReporter(StampLocatorActivity.FailedToLoadRegionStampMapFromLocalFile, true, $"File {fullFilePathForRegionStampMap} doesn't exist.");
                }
            }
            else
            {
                activityReporter(StampLocatorActivity.FailedToLoadRegionStampMapFromLocalFile, true, $"Folder {folderToCacheRegionStampMap} doesn't exist.");
            }

            var instance = new StampLocator(fullFilePathForRegionStampMap, regionStampMap, httpClient, stampLocatorUrl, activityReporter);

            await instance.RefreshNoThrow().ConfigureAwait(false);

            if (instance.regionStampMap == null || instance.regionStampMap.Count == 0)
            {
                throw new MetricsClientException("The region stamp map failed to initialize or is empty.");
            }

            instance.timerToRefreshRegionStampMap = new Timer(async state => await instance.RefreshNoThrow().ConfigureAwait(false), null, instance.refreshInternal, instance.refreshInternal);

            return(instance);
        }
Esempio n. 5
0
        /// <summary>
        /// Creates an instance of <see cref="StampLocator"/> asynchronously.
        /// </summary>
        /// <param name="folderToCacheRegionStampMap">The folder to cache region stamp map.</param>
        /// <param name="activityReporter">The activity reporter. The string argument contains the error detail when the activity results in an error; otherwise it is null.</param>
        /// <returns>An instance of <see cref="StampLocator"/>.</returns>
        public static Task <IStampLocator> CreateInstanceAsync(string folderToCacheRegionStampMap, ActivityReporter activityReporter)
        {
            if (string.IsNullOrWhiteSpace(folderToCacheRegionStampMap))
            {
                throw new ArgumentException("The argument is null or empty", nameof(folderToCacheRegionStampMap));
            }

            if (activityReporter == null)
            {
                throw new ArgumentNullException(nameof(activityReporter));
            }

            return(CreateInstanceAsync(
                       folderToCacheRegionStampMap,
                       HttpClientHelper.CreateHttpClient(ConnectionInfo.DefaultTimeout),
                       ThirdPartyRegionStampMapUrl,
                       activityReporter));
        }