/// <summary> /// 将当前的节点转换为一系列的递进式的节点 /// Eg. /App/Configs/Add /// ==> /App ,/App/Configs , /App/Configs/Add /// </summary> /// <returns></returns> public ZookeeperPathString[] ToSpliter() { var array = Path.Split("/") .Where(x => !string.IsNullOrWhiteSpace(x)) .ToArray(); var result = new List <ZookeeperPathString>(); ZookeeperPathString iteration = null; foreach (var a in array) { if (iteration == null) { iteration = a; } else { iteration += a; } result.Add(iteration); } return(result.ToArray()); }
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); } } }
public override void Set(string key, string value) { if (Source.ReadOnlyConfiguration) { return; } // set zookeeper var path = ZookeeperPathString.ParseFrom(key); if (!path.Path.StartsWith(Source.Path)) { path = Source.Path + path; } //ZooKeeper.Using(Source.ConnectionString, Source.SessionTimeout, null, LoadAsync); _client.SetDataAsync(path, Source.DataEncoding.GetBytes(value)) .ConfigureAwait(false) .GetAwaiter() .GetResult(); base.Set(key, value); }
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; } }