Beispiel #1
0
 private IEnumerable<MessageVersion1> ApplyMessageBuffer(MessageVersion1 message, out Neighbor neighbor)
 {
     neighbor = null;
     if (!CheckNeighbor(message)) return null;
     neighbor = neighbors.Single(n => n.Identifier.Equals(message.PeerId));
     if (message.PacketIndex <= neighbor.IncomingPacketIndex) return null;
     if (message.PacketIndex > neighbor.IncomingPacketIndex + 1)
     {
         lock (neighbor)
             neighbor.AddMessageToBuffer(message);
         return null;
     }
     lock (neighbor)
         if (neighbor.HasBufferedMessages)
         {
             neighbor.AddMessageToBuffer(message);
             neighbor.IncomingPacketIndex += (ulong)neighbor.BufferedMessages.Count;
             return neighbor.RemoveMessagesFromBuffer();
         }
         else
         {
             neighbor.IncomingPacketIndex++;
             return new[] { message };
         }
 }
Beispiel #2
0
 void RemoveNeighbor(PeerIdentifier peerIdentifier)
 {
     lock (neighbors)
     {
         var neighbor = new Neighbor { Identifier = peerIdentifier };
         if (neighbors.Contains(neighbor))
             neighbors.Remove(neighbor);
     }
 }
Beispiel #3
0
 void AddNeighbor(PeerIdentifier peerIdentifier, IPEndPoint endPoint)
 {
     lock (neighbors)
     {
         var neighbor = new Neighbor { Identifier = peerIdentifier };
         if (!neighbors.Contains(neighbor))
         {
             neighbor.IpEndPoints = new[] { endPoint };
             neighbors.Add(neighbor);
         }
         else
         {
             var ne = neighbors.Find(n => n.Equals(neighbor));
             ne.IpEndPoints = ne.IpEndPoints.Concat(new[] { endPoint });
         }
     }
 }