Beispiel #1
0
 public void Append(ElasticAddress peer)
 {
     lock (_peers)
     {
         _peers[peer.Address] = peer;
     }
 }
        private void OnTcpServerMessage(ITcpSession session, byte[] data)
        {
            Message message = Message.Parse(data);

//            Logger.trace($"OnTcpServerMessage(): message={message}");

            // should route this message?
            if (message.ShouldRoute())
            {
                OnElasticMessage(message);
                return;
            }

            // message sender
            Address sender = message.Sender;

            // authorized peer?
            ElasticAddress peer = Peers.Find(sender);

            if (ReferenceEquals(peer, null))
            {
                Logger.warning($"Unauthorized peer!");
                return;
            }

            // valid sign?
            if (!message.Verify(sender))
            {
                Logger.warning($"Peer signature not verified!");
                return;
            }

            // message handler invoke
            OnMessage?.Invoke(peer, message);
        }
 public void SendToAsync(byte[] data, ElasticAddress peer)
 {
     Task.Factory.StartNew(() =>
     {
         SendTo(data, peer);
     });
 }
        public static bool Contains(this ElasticAddress[] peers, ElasticAddress peer)
        {
            foreach (var p in peers)
            {
                if (peer.Address == p.Address)
                {
                    return(true);
                }
            }

            return(false);
        }
        public static ElasticAddress Pick(this ElasticAddress[] peers, ElasticAddress me)
        {
            if (peers.Length == 0)
            {
                return(default(ElasticAddress));
            }

            if (peers.Contains(me))
            {
                return(me);
            }

            return(peers[RndProvider.Next(peers.Length)]);
        }
        public ElasticNode(IConfiguration configuration, ILoggable logger, IPeerList peers, PrivateKey nodeKey, ElasticAddress localEndPoint)
        {
            Configuration = configuration;
            Logger        = logger;
            NodeKey       = nodeKey;
            LocalEndPoint = localEndPoint;
            Peers         = peers;

            TcpServer = new TcpServer()
            {
                OnStart   = OnTcpServerStart,
                OnStop    = OnTcpServerStop,
                OnAccept  = OnTcpServerAccept,
                OnClose   = OnTcpServerClose,
                OnMessage = OnTcpServerMessage
            };
        }
 public static string Ellipsis(this ElasticAddress peer, int head, int tail)
 {
     return($"{ElasticAddress.PREFIX}{peer.HexAddress.Ellipsis(head, tail)}@{peer.Host}:{peer.Port}");
 }
 public static string Ellipsis(this ElasticAddress peer, int head)
 {
     return(Ellipsis(peer, head, 0));
 }
 public static string Ellipsis(this ElasticAddress peer)
 {
     return(Ellipsis(peer, 6, 6));
 }
Beispiel #10
0
 public bool Exists(ElasticAddress peer)
 {
     return(Exists(peer.Address));
 }
Beispiel #11
0
 public void Remove(ElasticAddress peer)
 {
     Remove(peer.Address);
 }
 public bool SendTo(Message message, ElasticAddress peer)
 {
     return(SendTo(message.ToBytes(), peer));
 }
 public bool SendTo(byte[] data, ElasticAddress peer)
 {
     return(SendTo(data, peer.Host, peer.Port));
 }