public void Poll(CovenantAPI CovenantClient, int DelayMilliSeconds = 100) { DateTime toDate = DateTime.FromBinary(CovenantClient.ApiEventsTimeGet().Value); DateTime fromDate; bool done = false; while (!done) { fromDate = toDate; toDate = DateTime.FromBinary(CovenantClient.ApiEventsTimeGet().Value); IList <EventModel> events = CovenantClient.ApiEventsRangeByFromdateByTodateGet(fromDate.ToBinary(), toDate.ToBinary()); foreach (var anEvent in events) { EventOccurred?.Invoke(this, new EventOccurredArgs(anEvent)); } Thread.Sleep(DelayMilliSeconds); } }
private bool Login(string CovenantUsername, string CovenantPassword, string CovenantHash) { HttpClientHandler clientHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = (sender, cert, chain, errors) => { // Cert Pinning - Trusts only the Covenant API certificate return(CovenantHash == "" || cert.GetCertHashString() == CovenantHash); } }; CovenantAPI LoginCovenantClient = new CovenantAPI(this.CovenantURI, new BasicAuthenticationCredentials { UserName = "", Password = "" }, clientHandler); try { CovenantUserLoginResult result = LoginCovenantClient.ApiUsersLoginPost(new CovenantUserLogin { UserName = CovenantUsername, Password = CovenantPassword }); if (result.Success ?? default) { TokenCredentials creds = new TokenCredentials(result.Token); CovenantAPI CovenantClient = new CovenantAPI(CovenantURI, creds, clientHandler); this.EliteMenu = new EliteMenu(CovenantClient); ReadLine.AutoCompletionHandler = this.EliteMenu.GetCurrentMenuItem().TabCompletionHandler; this.EventPoller = new Task(() => { int DelayMilliSeconds = 2000; DateTime toDate = DateTime.FromBinary(CovenantClient.ApiEventsTimeGet().Value); DateTime fromDate; while (true) { try { fromDate = toDate; toDate = DateTime.FromBinary(CovenantClient.ApiEventsTimeGet().Value); IList <EventModel> events = CovenantClient.ApiEventsRangeByFromdateByTodateGet(fromDate.ToBinary(), toDate.ToBinary()); foreach (var anEvent in events) { string context = this.EliteMenu.GetMenuLevelTitleStack(); if (anEvent.Type == EventType.Normal) { if (this.EventPrinter.PrintEvent(anEvent, context)) { this.EliteMenu.PrintMenuLevel(); } } else if (anEvent.Type == EventType.Download) { DownloadEvent downloadEvent = CovenantClient.ApiEventsDownloadByIdGet(anEvent.Id ?? default); File.WriteAllBytes(Path.Combine(Common.EliteDownloadsFolder, downloadEvent.FileName), Convert.FromBase64String(downloadEvent.FileContents)); } } Thread.Sleep(DelayMilliSeconds); } catch (Exception) { } } }, this.CancelEventPoller.Token); } else { return(false); } } catch (HttpOperationException) { return(false); } return(true); }