Implement client-side DHT polling if a fanout cannot successfully WatchValue

This issue affects VeilidChat.

When a WatchValue cannot be set on a DHT entry (be it from older versions of veilid_server or from those nodes all having their watches list full), veilid-core does nothing to ensure that it provides any updates to that DHT entry. This is a bug, because ongoing updates were requested and Veilid is not facilitating them, which otherwise requires the application developer to implement a tedious and error-prone polling of the requested DHT entry, as well as to integrate it into their own code in a way that doesn't go through the veilid callback function.

The desired behavior is that when neither value_nodes or fanout yield a successful Watch, veilid-core should set a task on the ticker to poll for the entry, and let it handle the Watch notification when the entry it gets changes.

Polling sucks. Developers not being able to rely on Veilid to do its job sucks more.

Assignee Loading
Time tracking Loading