Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }