private async Task Loop(ZooKeeper keeper, ZookeeperPathString path) { var data = await keeper.getDataAsync(path, true); var sValue = Source.DataEncoding.GetString(data.Data); Data.TryAdd(path.ToKeyString(), sValue); if (data.Stat.getNumChildren() > 0) { var childs = await keeper.getChildrenAsync(path, true); foreach (var c in childs.Children) { await Loop(keeper, path + c); } } }
private async Task OnKeyChanged(WatchedEvent args) { var eventType = args.get_Type(); ZookeeperPathString path = args.getPath(); var key = path.ToKeyString(); string value; DataResult result; switch (eventType) { case Watcher.Event.EventType.None: break; case Watcher.Event.EventType.NodeCreated: result = await _client.getDataAsync(path); value = Source.DataEncoding.GetString(result.Data); Data.TryAdd(key, value); break; case Watcher.Event.EventType.NodeDeleted: Data.Remove(key); break; case Watcher.Event.EventType.NodeDataChanged: result = await _client.getDataAsync(path); value = Source.DataEncoding.GetString(result.Data); Data[key] = value; break; // ignore nochild changed every node was be watched case Watcher.Event.EventType.NodeChildrenChanged: default: break; } }