public void Insert(Entry entry, bool trim = true) { lock (this) { if (entry.Generation >= NewestRegisteredSDSGeneration && entry.IsFinished) { ObservationLink.SignalUpdate(entry.SDS); } if (entry.Generation > NewestRegisteredSDSGeneration) { while (entry.Generation > NewestRegisteredSDSGeneration + 1) { int gen2 = NewestRegisteredSDSGeneration + 1; sdsList.Add(new Entry(gen2)); } //Debug.Assert(sds.Generation == NewestSDS.Generation + 1); sdsList.Add(entry); } else { int at = entry.Generation - OldestSDS.Generation; if (at < 0 || at >= sdsList.Count) { throw new IntegrityViolation("Cannot insert SDS generation " + entry.Generation + ", oldest = " + OldestSDSGeneration); } sdsList[at] = entry; } if (trim) { Trim(); } } }
private void UpdateAddress(Address addr) { if (address == addr) { return; } address = addr; ObservationLink.SignalAddressUpdate(FullShardAddress); }
public static ObservationLink Establish(TcpClient client) { try { ObservationLink rs = new ObservationLink(client); Log.Message("Registering " + client.Client.RemoteEndPoint); lock (registry) { registry.Add(rs); } return(rs); } catch { } return(null); }
public Entry Insert(Tuple <SDS, IntermediateSDS> tuple, bool trim = true) { lock (this) { int gen = tuple.Item1.Generation; if (gen >= NewestRegisteredSDSGeneration) { ObservationLink.SignalUpdate(tuple.Item1); } Entry rs; if (gen > NewestRegisteredSDSGeneration) { while (gen > NewestRegisteredSDSGeneration + 1) { int gen2 = NewestRegisteredSDS.Generation + 1; sdsList.Add(new Entry(gen2)); } //Debug.Assert(sds.Generation == NewestSDS.Generation + 1); sdsList.Add(new Entry(tuple.Item1, tuple.Item2)); rs = sdsList.GetLast(); } else { int at = gen - OldestSDS.Generation; if (at < 0 || at >= sdsList.Count) { throw new IntegrityViolation("Cannot insert SDS generation " + gen + ", oldest = " + OldestSDSGeneration); } Entry e = sdsList[at]; e.SDS = tuple.Item1; e.IntermediateSDS = tuple.Item2; e.SignificantInboundChange = false; rs = e; } if (trim) { Trim(); } return(rs); } }