public NodeSynchronizer(NodeCache nodeCache, StateOfNeoContext ctx, RPCNodeCaller rPCNodeCaller, LocationCaller locationCaller, IOptions <NetSettings> netsettings) { _nodeCache = nodeCache; _ctx = ctx; _rPCNodeCaller = rPCNodeCaller; _locationCaller = locationCaller; _netsettings = netsettings; UpdateDbCache(); }
private async Task UpdateNodesInformation() { var dbNodes = this.db.Nodes .Include(n => n.NodeAddresses) .Where(n => n.Net.ToLower() == netsettings.Value.Net.ToLower()) .Where(n => n.SuccessUrl == null) //.Where(n => n.Type != NodeAddressType.REST) .ToList(); foreach (var dbNode in dbNodes) { if (dbNode.Type == NodeAddressType.REST) { if (dbNode.Service == NodeCallsConstants.NeoScan) { var heightResponse = await HttpRequester.MakeRestCall <HeightResponseObject>($@"{dbNode.Url}get_height", HttpMethod.Get); if (heightResponse != null) { dbNode.SuccessUrl = dbNode.Url; dbNode.Height = heightResponse.Height; var result = await LocationCaller.UpdateNode(dbNode, dbNode.NodeAddresses.First().Ip); if (result) { this.db.Nodes.Update(dbNode); this.db.SaveChanges(); } } } else if (dbNode.Service == NodeCallsConstants.NeoNotification) { var versionResponse = await HttpRequester.MakeRestCall <NeoNotificationVersionResponse>($@"{dbNode.Url}version", HttpMethod.Get); if (versionResponse != null) { dbNode.SuccessUrl = dbNode.Url; dbNode.Version = versionResponse.Version; dbNode.Height = versionResponse.Height; var result = await LocationCaller.UpdateNode(dbNode, dbNode.NodeAddresses.First().Ip); if (result) { this.db.Nodes.Update(dbNode); this.db.SaveChanges(); } } } } else if (dbNode.Type == NodeAddressType.RPC) { var oldSuccessUrl = dbNode.SuccessUrl; var newHeight = await this.rPCNodeCaller.GetNodeHeight(dbNode); if (newHeight != null) { var newVersion = await this.rPCNodeCaller.GetNodeVersion(dbNode); if (newVersion != null) { dbNode.Version = newVersion; dbNode.Height = newHeight; var result = await LocationCaller.UpdateNode(dbNode, dbNode.NodeAddresses.First().Ip); if (result) { if (string.IsNullOrEmpty(dbNode.Net)) { dbNode.Net = netsettings.Value.Net; } this.db.Nodes.Update(dbNode); this.db.SaveChanges(); } this.db.Nodes.Update(dbNode); this.db.SaveChanges(); } } } } }