Exemple #1
0
        private void TaskComplete(object o, TaskCompleteEventArgs e)
        {
            task.Completed -= TaskComplete;

            SendQueryEventArgs args = (SendQueryEventArgs)e;

            if (args.TimedOut)
            {
                bucket.SortBySeen();
                int index = bucket.Nodes.IndexOf(node);
                if (index == -1 || (++index < bucket.Nodes.Count))
                {
                    QueryNode(bucket.Nodes[0]);
                }
                else
                {
                    RaiseComplete(new TaskCompleteEventArgs(this));
                }
            }
            else
            {
                RaiseComplete(new TaskCompleteEventArgs(this));
            }
        }
Exemple #2
0
        internal async Task <SendQueryEventArgs> SendQueryAsync(QueryMessage query, Node node)
        {
            SendQueryEventArgs e = default(SendQueryEventArgs);

            for (int i = 0; i < 4; i++)
            {
                e = await MessageLoop.SendAsync(query, node);

                // If the message timed out and we we haven't already hit the maximum retries
                // send again. Otherwise we propagate the eventargs through the Complete event.
                if (e.TimedOut)
                {
                    node.FailedCount++;
                    continue;
                }
                else
                {
                    node.Seen();
                    return(e);
                }
            }

            return(e);
        }