Esempio n. 1
0
 private static void NTPThread()
 {
     try
     {
         while (true)
         {
             DateTime newNTPTime = GetNetworkTime(ntpHost);
             long     ntpStamp   = GetTimestamp();
             timeLock.DoLocked(() =>
             {
                 ntpTime       = newNTPTime;
                 ntpQueryStamp = ntpStamp;
             });
             Interlocked.Increment(ref numQueries);
             Thread.Sleep(TimeSpan.FromMinutes(2));
         }
     }
     catch (Exception ex)
     {
         Log.Error("NTP query thread: " + ex);
     }
 }
Esempio n. 2
0
        public int Filter(Func <string, object, bool> filter)
        {
            int removed = 0;

            filterLock.DoLocked(() =>
            {
                try
                {
                    Queue <Tuple <string, object> > temp = new Queue <Tuple <string, object> >();
                    Tuple <string, object> tmp;
                    while (dispatch.TryDequeue(out tmp))
                    {
                        if (filter(tmp.Item1, tmp.Item2))
                        {
                            temp.Enqueue(tmp);
                        }
                        else
                        {
                            removed++;
                        }
                    }
                    while (temp.Count > 0)
                    {
                        dispatch.Enqueue(temp.Dequeue());
                    }


                    while (sent.TryDequeue(out tmp))
                    {
                        if (filter(tmp.Item1, tmp.Item2))
                        {
                            temp.Enqueue(tmp);
                        }
                        else
                        {
                            removed++;
                        }
                    }
                    while (temp.Count > 0)
                    {
                        sent.Enqueue(temp.Dequeue());
                    }

                    //leave sem as is, allow null result of GetNext()
                }
                catch (Exception)
                { }
            });
            return(removed);
        }
Esempio n. 3
0
        private async Task PollAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                var header = await store.Documents.HeadAsync(ID, null, cancellationToken);

                if (cancellationToken.IsCancellationRequested || !header.IsSuccess)
                {
                    return;
                }
                if (Latest == null || header.Rev != Latest._rev)
                {
                    var data = await GetConflictResolvedAsync(store, ID, Merger, cancellationToken);

                    if (cancellationToken.IsCancellationRequested || data == null)
                    {
                        return;                         //try again later
                    }
                    sl.DoLocked(() =>
                    {
                        Log.Minor("Got new data on " + this + ": rev " + header.Rev);
                        //if (lastQueriedValue == null)
                        //	anyValueAsync.SetResult(data);
                        Latest = data;
                        OnChange?.Invoke(data);
                        Action <T> next;
                        while (onGet.TryTake(out next))
                        {
                            next(data);
                        }
                    });
                }
            }
            catch (TaskCanceledException)
            {}
        }