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; }
/// <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(); } }); }
/// <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); }
/// <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)); }