public static void Bind(this IConfiguration config, NetworkConfig networkConfig) { networkConfig.Magic = ParseUInt32(config, "magic", DefaultMagic); networkConfig.Port = ParseUInt16(config, "port"); networkConfig.ForceIPv6 = ParseBool(config, "forceIPv6"); networkConfig.AclConfig = ParseAcl(config, "acl"); networkConfig.PeerEndPoints = ParsePeerEndPoints(config); networkConfig.StandByValidator = ParseStandByValidators(config); }
public Server( IBlockchain blockchain, NetworkConfig config, IPeerFactory peerFactory, IPeerListener peerListener, IMessageHandler <Message> messageHandler, ILogger <Server> logger, NetworkACLFactory aclFactory) { if (config == null) { throw new ArgumentNullException(nameof(config)); } this._blockchain = blockchain ?? throw new ArgumentNullException(nameof(blockchain)); this._peerFactory = peerFactory ?? throw new ArgumentNullException(nameof(peerFactory)); this._peerListener = peerListener ?? throw new ArgumentNullException(nameof(peerListener)); this._logger = logger ?? throw new ArgumentNullException(nameof(logger)); if (aclFactory == null) { throw new ArgumentNullException(nameof(aclFactory)); } this._messageHandler = messageHandler; this._acl = aclFactory.CreateNew(); this._acl?.Load(config?.ACL); this._peerListener.OnPeerConnected += PeerConnected; this._connectedPeers = new ConcurrentBag <IPeer>(); this._failedPeers = new List <IPEndPoint>(); // TODO: Change after port forwarding implementation this._port = config.Port; ProtocolVersion = 2; var r = new Random(Environment.TickCount); Nonce = (uint)r.Next(); this._peerEndPoints = config.PeerEndPoints; this._userAgent = $"/NEO:{Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}/"; }
/// <summary> /// Server context /// </summary> /// <param name="config">Config</param> /// <param name="blockchain">Blockchain</param> public ServerContext(NetworkConfig config, IBlockchain blockchain) { if (config == null) { throw new ArgumentNullException(nameof(config)); } _blockchain = blockchain ?? throw new ArgumentNullException(nameof(blockchain)); _version = new VersionPayload { Version = PROTOCOL_VERSION, Services = NODE_NETWORK, Timestamp = DateTime.UtcNow.ToTimestamp(), Port = config.Port, Nonce = (uint)new Random(Environment.TickCount).Next(), UserAgent = $"/NEO-Sharp:{Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}/", CurrentBlockIndex = _blockchain.CurrentBlock?.Index ?? 0, Relay = true }; }
/// <summary> /// Server context /// </summary> /// <param name="config">Config</param> /// <param name="blockchainContext">Context information updated by blockchain.</param> public ServerContext(NetworkConfig config, IBlockchainContext blockchainContext) { if (config == null) { throw new ArgumentNullException(nameof(config)); } _blockchainContext = blockchainContext ?? throw new ArgumentNullException(nameof(blockchainContext)); _version = new VersionPayload { Version = ProtocolVersion, Services = NodeNetwork, Timestamp = DateTime.UtcNow.ToTimestamp(), Port = config.Port, Nonce = BitConverter.ToUInt32(Crypto.Default.GenerateRandomBytes(4), 0), UserAgent = $"/NEO-Sharp:{Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}/", CurrentBlockIndex = _blockchainContext.CurrentBlock?.Index ?? 0, Relay = true }; MaxConnectedPeers = config.MaxConnectedPeers; ConnectedPeers = new ConcurrentDictionary <EndPoint, IPeer>(); }
public static void Bind(this IConfiguration config, NetworkConfig networkConfig) { networkConfig.Port = ParsePort(config); networkConfig.ForceIPv6 = ParseForceIPv6(config); networkConfig.PeerEndPoints = ParsePeerEndPoints(config); }