예제 #1
0
파일: SDSStack.cs 프로젝트: IronFox/Shard
        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();
                }
            }
        }
예제 #2
0
 private void UpdateAddress(Address addr)
 {
     if (address == addr)
     {
         return;
     }
     address = addr;
     ObservationLink.SignalAddressUpdate(FullShardAddress);
 }
예제 #3
0
 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);
 }
예제 #4
0
파일: SDSStack.cs 프로젝트: IronFox/Shard
        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);
            }
        }