public override nodeConf newConnected(string id, Ice.Current current__) { Console.WriteLine("Slave connected: {0}", id); if (IsDisconnecting) { throw new System.Exception("Node shutting down."); } lock (ranges) { nodeConf nc = new nodeConf(); nc.parentNode = _nodeName; nc.nodeId = id; if (ranges.Count > 1) { nc.min = ranges[0].min; nc.max = ranges[0].max; ranges.RemoveAt(0); } else { nc.min = ranges[0].min; long v = ranges[0].max; v += ranges[0].min; v /= 2; nc.max = (int)v; range r = ranges[0]; r.min = nc.max + 1; ranges[0] = r; } lock (values) { List<keyvaluepair> elems = new List<keyvaluepair>(); foreach (int crc in new List<int>(values.Keys)) { if (crc >= nc.min && crc <= nc.max) { elems.AddRange(values[crc]); values.Remove(crc); } } nc.elems = elems.ToArray(); } childs.Add(nc); Console.WriteLine(describe()); return nc; } }
public override void slaveDisconnected(string id, range[] newRanges, nodeConf[] childRanges, Ice.Current current__) { lock (ranges) { Console.WriteLine("Slave disconected "+id); nodeConf removedNode = null; foreach (nodeConf nc in childs) { if (nc.nodeId == id) { removedNode = nc; } } if (removedNode != null) { childs.Remove(removedNode); foreach (range r in newRanges) { ranges.Add(r); } reduceRanges(); foreach (nodeConf nc in childRanges) { childs.Add(nc); } } else { Console.WriteLine("Struct fail: {0} is not a child of {1}", id, _nodeName); } Console.WriteLine(describe()); } }
public override void masterDisconnected(string connectTo, range subtree, range[] newRanges, nodeConf[] childRanges, Ice.Current current__) { lock (ranges) { Console.WriteLine("Master disconnected"); _parent = connectTo; if (_parent == null || _parent.Equals("")) // jestem nowy rootem dla tego poddrzewa { Console.WriteLine("setting subtree range: "+subtree.min + " : " + subtree.max); _parent = null; subtreeRange = subtree; } ranges.AddRange(newRanges); foreach (nodeConf nc in childRanges) { nc.parentNode = _nodeName; } childs.AddRange(childRanges); reduceRanges(); Console.WriteLine(describe()); } }