public NodeSynchronizer(NodeCache nodeCache,
                         StateOfNeoContext ctx,
                         RPCNodeCaller rPCNodeCaller,
                         LocationCaller locationCaller,
                         IOptions <NetSettings> netsettings)
 {
     _nodeCache      = nodeCache;
     _ctx            = ctx;
     _rPCNodeCaller  = rPCNodeCaller;
     _locationCaller = locationCaller;
     _netsettings    = netsettings;
     UpdateDbCache();
 }
Example #2
0
        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();
                        }
                    }
                }
            }
        }