コード例 #1
0
        private void OnConsoleCommandPeersLayout(string[] args)
        {
            byte n = Env.Value <byte>("n", 4);

            if (args.Length > 0)
            {
                byte.TryParse(args[0], out n);
            }

            // define layout
            ElasticLayout layout = ElasticLayout.DefineLayout(Peers.Count, n);

            for (byte x = 1; x <= layout.X; x++)
            {
                for (byte y = 1; y <= layout.Y; y++)
                {
                    for (byte z = 1; z <= layout.Z; z++)
                    {
                        Elastic3D coordinates = new Elastic3D(x, y, z);
                        string[]  peers       = Peers.ToArray <string>(coordinates, layout);

                        BConsole.WriteLine(ConsoleColor.DarkCyan, $"Coordinates{coordinates.ToString()}: nPeers={peers.Length}");
                        foreach (var peer in peers)
                        {
                            BConsole.WriteLine(EndPoint.ToString() == peer?ConsoleColor.Yellow : ConsoleColor.Gray, $" {peer}");
                        }
                    }
                }
            }

            BConsole.WriteLine(ConsoleColor.DarkCyan, $"ElasticLayout.DefineLayout({Peers.Count},{n})={layout.ToString()}");
        }
コード例 #2
0
        private void Register(ITcpSession session)
        {
            Message message = new Message.Builder()
                              .Body(ACTION, ACTION_REGISTER)
                              .Body("enode", NodeUrl.ToString())
                              .Build(NodeKey);

            session?.Write(message.ToBytes());
        }
コード例 #3
0
        private void OnTcpMessageRegister(ITcpSession session, Message message)
        {
            // register requested enode
            ElasticAddress address = message.Value <string>("enode");

            // verify message
            PrivateKey nodeKey = MasterKey.CKD($"{address.Host}:{address.Port}");

            if (!message.Verify(nodeKey.Address))
            {
                Logger.warning("Unverified message!");
                return;
            }

            // valid address?
            if (nodeKey.Address != address.Address)
            {
                Logger.warning("Invalid address");
                return;
            }

            // register peer
            Peers.Append(address);

            // session
            lock (_sessionMap)
                _sessionMap[session.SID] = address.Address;

            lock (BConsole.Lock)
            {
                BConsole.Write(ConsoleColor.DarkCyan, address.ToString());
                BConsole.WriteLine(" registered!");
            }

            SyncAllPeers();
        }