Beispiel #1
0
 public void updatePair(IKey key, IValue newValue)
 {
     VersionableValue v_v;
     debug("updatePair: A actualizar a chave: " + key.HashString);
     if (db.TryGetVersionValue(key, out v_v) || GetAndCacheFromRemote(key, out v_v)) {
         ValueHolder v;
         v_v = new VersionableValue(v_v, newValue);
         if (db.TryUpdValue(key, new VersionableValue(v_v)) && db.TryGetValue(key, out v)) {
             if (v.IsLocal()) {
                 DeleteFromRemoteClients(key.HashString);
             }
             else {
                 debug("updatePair: chave remota");
                 //TODO: se o servidor falar, alterar o Owner para local.
                 AsyncCallNoWait(() => v.Owner.Execute((x) => x.SrvUpdateValue(key.HashString, v_v)));
             }
         }
     }
     else {
         debug("Chave nao encontrada");
     }
 }
Beispiel #2
0
 // ========================================================================
 //          SERVIDORES
 // ========================================================================
 private bool GetAndCacheFromRemote(IKey key, out VersionableValue value)
 {
     List<Action> actions = new List<Action>();
     foreach (ServerEndPoint ep in servidores.Values)
         actions.Add(() => ep.Execute((x) => {
             VersionableValue v = x.SrvGetLocalValue(key.HashString, meuendpoint.Name);
             if (v != null)
                 db.TryAddValue(key, v, ep);
         }));
     AsyncCallAndWait(actions);
     return db.TryGetVersionValue(key, out value);
 }
Beispiel #3
0
 public bool SrvUpdateValue(string key, VersionableValue value)
 {
     debug("SrvUpdateValue a actualisar chave: " + key);
     ValueHolder v;
     if (db.TryGetValue(key, out v)) {
         if (v.IsLocal()) {
             if (db.TryUpdValue(key, value)) {
                 DeleteFromRemoteClients(key);
                 return true;
             }
         }
     }
     return false;
 }