Example #1
0
        public async ETTask <Session> OnTransferAsync2(Transfer transfer, Session session2)
        {
            Consensus consensus = Entity.Root.GetComponent <Consensus>();

            Q2P_Transfer q2p_Transfer = new Q2P_Transfer();

            q2p_Transfer.transfer = JsonHelper.ToJson(transfer);

            var networkInner = Entity.Root.GetComponent <ComponentNetworkInner>();
            var nodeList     = Entity.Root.GetComponent <NodeManager>().GetNodeList();

            // 遍历node提交交易,直到找个一个可以出块的节点
            int start = RandomHelper.Random();

            for (int i = start; i < start + nodeList.Count; i++)
            {
                var     node    = nodeList[i % nodeList.Count];
                Session session = session2 ?? await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));

                if (session != null && session.IsConnect())
                {
                    var r2p_Transfer = (R2P_Transfer)await session.Query(q2p_Transfer, 5);

                    if (r2p_Transfer != null && r2p_Transfer.rel != "-1")
                    {
                        return(session);
                    }
                }
            }
            await Task.Delay(10);

            return(null);
        }
Example #2
0
        // Broadcast to my Kademlia
        public async void Broadcast2Kad(IMessage message)
        {
            NodeData nodeSelf = nodes.Find((n) => { return(n.nodeId == StringHelper.HashCode(networkInner.ipEndPoint.ToString())); });

            if (nodeSelf == null)
            {
                return;
            }

            List <NodeData> result = GetkList(nodeSelf.kIndex);

            for (int i = 0; i < result.Count; i++)
            {
                NodeData node = result[i];
                if (node.nodeId != nodeSelf.nodeId) // ignore self
                {
                    Session session = await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));

                    if (session != null && session.IsConnect())
                    {
                        session.Send(message);
                    }
                }
            }
        }
Example #3
0
        //[MessageMethod(NetOpcode.Q2P_New_Node)]
        async void Q2P_New_Node_Handle(Session session, int opcode, object msg)
        {
            Q2P_New_Node new_Node = msg as Q2P_New_Node;

            try
            {
                if (new_Node.version != BlockMgr.networkID)
                {
                    R2P_New_Node response = new R2P_New_Node()
                    {
                        Nodes = "", nodeTime = TimeHelper.Now()
                    };
                    response.Message = $"Network Version Not Compatible your:{new_Node.version} cur:{BlockMgr.networkID}";
                    session.Reply(new_Node, response);
                    return;
                }

                //Log.Debug($"Q2P_New_Node_Handle {new_Node.address} ipEndPoint: {new_Node.ipEndPoint}  1");
                Session sessionNew = await networkInner.Get(NetworkHelper.ToIPEndPoint(new_Node.ipEndPoint), 2);

                Q2P_IP_INFO qIPNode = new Q2P_IP_INFO();
                R2P_IP_INFO rIPNode = (R2P_IP_INFO)await sessionNew.Query(qIPNode, 0.3f);

                if (rIPNode != null)
                {
                    NodeData data = new NodeData();
                    data.nodeId     = new_Node.ActorId;
                    data.address    = new_Node.address;
                    data.ipEndPoint = new_Node.ipEndPoint;
                    data.state      = new_Node.state;
                    data.version    = new_Node.version;
                    data.kIndex     = GetkIndex();
                    AddNode(data);

                    R2P_New_Node response = new R2P_New_Node()
                    {
                        Nodes = "", nodeTime = TimeHelper.Now()
                    };
                    string nodesjson = JsonHelper.ToJson(nodes);
                    if (StringHelper.HashCode(nodesjson) != new_Node.HashCode)
                    {
                        response.Nodes = nodesjson;
                        //session.Send(response);
                    }
                    session.Reply(new_Node, response);
                    return;
                }
            }
            catch (Exception)
            {
            }
            {
                R2P_New_Node response = new R2P_New_Node()
                {
                    Nodes = "", nodeTime = TimeHelper.Now()
                };
                response.Message = "LAN not supported or Your network has a firewall";
                session.Reply(new_Node, response);
            }
        }
Example #4
0
        public async void OnLogin()
        {
            try
            {
                IPEndPoint connetEndPoint = NetworkHelper.ToIPEndPoint(ServerIP);

                Session session = Game.Scene.GetComponent <NetOuterComponent>().Create(connetEndPoint);

                M2C_Reload M2C_Reload = (M2C_Reload)await session.Call(new C2M_Reload()
                {
                    Account = nickname.text, Password = password.text
                });

                //connetEndPoint = NetworkHelper.ToIPEndPoint(M2C_Reload.Message);
                //Session gateSession = Game.Scene.GetComponent<NetOuterComponent>().Create(connetEndPoint);
                //Game.Scene.AddComponent<SessionComponent>().Session = gateSession;
                Game.Scene.AddComponent <SessionComponent>().Session = session;

                G2C_EnterMap G2C_EnterMap = (G2C_EnterMap)await Game.Scene.GetComponent <SessionComponent>().Session.Call(new C2G_EnterMap());

                print("登陆gate成功!");

                // 创建Player
                Player          player          = ETModel.ComponentFactory.CreateWithId <Player>(G2C_EnterMap.UnitId);
                PlayerComponent playerComponent = ETModel.Game.Scene.GetComponent <PlayerComponent>();
                playerComponent.MyPlayer = player;

                uiLogin.SetActive(false);
                uiLobby.SetActive(true);
            }
            catch (Exception e)
            {
                Log.Error(e.ToString());
            }
        }
Example #5
0
        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="protocol">通讯协议 TCP ? KCP ? WEB?</param>
        /// <param name="address">本地IP地址</param>
        public void Awake(NetworkProtocol protocol, string address)
        {
            try
            {
                IPEndPoint ipEndPoint;
                switch (protocol)
                {
                case NetworkProtocol.KCP:
                    ipEndPoint   = NetworkHelper.ToIPEndPoint(address);
                    this.Service = new KService(ipEndPoint, this.OnAccept);                             //传过去 得到客户端AChannel的回调
                    break;

                case NetworkProtocol.TCP:
                    ipEndPoint   = NetworkHelper.ToIPEndPoint(address);
                    this.Service = new TService(ipEndPoint, this.OnAccept);
                    break;

                case NetworkProtocol.WebSocket:
                    string[] prefixs = address.Split(';');
                    this.Service = new WService(prefixs, this.OnAccept);
                    break;
                }
            }
            catch (Exception e)
            {
                throw new Exception($"NetworkComponent Awake Error {address}", e);
            }
        }
Example #6
0
        public async void OnTransferAsync(BlockSub transfer)
        {
            Consensus consensus = Entity.Root.GetComponent <Consensus>();

            Q2P_Transfer q2p_Transfer = new Q2P_Transfer();

            q2p_Transfer.transfer = JsonHelper.ToJson(transfer);

            var networkInner = Entity.Root.GetComponent <ComponentNetworkInner>();
            var nodeList     = Entity.Root.GetComponent <NodeManager>().GetNodeRandomList();

            // 遍历node提交交易,直到找个一个可以出块的节点
            for (int i = 0; i < nodeList.Count; i++)
            {
                var     node    = nodeList[i];
                Session session = await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));

                if (session != null && session.IsConnect())
                {
                    var r2p_Transfer = (R2P_Transfer)await session.Query(q2p_Transfer, 5);

                    if (r2p_Transfer != null && r2p_Transfer.rel != "-1")
                    {
                        break;
                    }
                }
            }
        }
Example #7
0
        public async Task <string> QueryPrehashmkl(long syncHeight, string ipEndPoint = null)
        {
            Q2P_Prehashmkl q2p_PreHash = new Q2P_Prehashmkl();

            q2p_PreHash.ActorId = nodeManager.GetMyNodeId();
            q2p_PreHash.height  = syncHeight;

            Session session = null;

            if (ipEndPoint != null && ipEndPoint != "")
            {
                session = await networkInner.Get(NetworkHelper.ToIPEndPoint(ipEndPoint));
            }
            if (session != null && !session.IsConnect())
            {
                session = null;
            }

            if (session == null)
            {
                NodeManager.NodeData node = nodeManager.GetRandomNode();
                if (node != null)
                {
                    session = await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));
                }
            }

            if (session != null)
            {
                R2P_Prehashmkl r2p_Prehashmkl = (R2P_Prehashmkl)await session.Query(q2p_PreHash);

                return(r2p_Prehashmkl != null ? r2p_Prehashmkl.prehashmkl : "");
            }
            return("");
        }
Example #8
0
        public async void Broadcast(IMessage message)
        {
            // 向所在桶广播
            Broadcast2Kad(message);

            // 获取广播列表
            List <NodeData> result = GetBroadcastNode();

            // 剔除自己所在桶
            NodeData nodeSelf = nodes.Find((n) => { return(n.nodeId == StringHelper.HashCode(networkInner.ipEndPoint.ToString())); });

            if (nodeSelf != null)
            {
                NodeData nodeIgnore = result.Find((n) => { return(n.kIndex == nodeSelf.kIndex); });
                if (nodeIgnore != null)
                {
                    result.Remove(nodeIgnore);
                }
            }

            // 开始广播
            for (int i = 0; i < result.Count; i++)
            {
                NodeData node    = result[i];
                Session  session = await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));

                if (session != null && session.IsConnect())
                {
                    session.Send(message);
                }
            }
        }
Example #9
0
        public async override void Start()
        {
            networkInner.ipEndPoint = NetworkHelper.ToIPEndPoint(GetIpV4() + ":" + networkInner.ipEndPoint.Port);
            Log.Info($"Node:{networkInner.ipEndPoint.ToString()}");

            string        tmp  = Program.jdNode["NodeSessions"].ToString();
            List <string> list = JsonHelper.FromJson <List <string> >(tmp);

            Q2P_New_Node new_Node = new Q2P_New_Node();

            new_Node.ActorId    = GetMyNodeId();
            new_Node.address    = Wallet.GetWallet().GetCurWallet().ToAddress();
            new_Node.ipEndPoint = networkInner.ipEndPoint.ToString();

            Log.Debug($"NodeManager.Start");
            while (true && list.Count > 0)
            {
                try
                {
                    for (int ii = 0; ii < list.Count; ii++)
                    {
                        bool bResponse = false;
                        new_Node.HashCode = StringHelper.HashCode(JsonHelper.ToJson(nodes));
                        new_Node.sendTime = TimeHelper.Now();
                        Session session = await networkInner.Get(NetworkHelper.ToIPEndPoint(list[0]));

                        if (session != null && session.IsConnect())
                        {
                            //Log.Debug($"NodeSessions connect " + r2P_New_Node.ActorId);
                            //session.Send(new_Node);

                            R2P_New_Node r2P_New_Node = (R2P_New_Node)await session.Query(new_Node, 0.3f);

                            if (r2P_New_Node != null)
                            {
                                if (r2P_New_Node.Nodes != "")
                                {
                                    nodes = JsonHelper.FromJson <List <NodeData> >(r2P_New_Node.Nodes);
                                    long timeNow = TimeHelper.Now();
                                    nodeTimeOffset = (timeNow - new_Node.sendTime) / 2 + r2P_New_Node.nodeTime - timeNow;
                                }
                                bResponse = true;
                            }
                        }
                        if (bResponse)
                        {
                            break;
                        }
                    }

                    // 等待5秒后关闭连接
                    await Task.Delay(5 * 1000);
                }
                catch (Exception)
                {
                    await Task.Delay(5 * 1000);
                }
            }
        }
Example #10
0
        public override void EndInit()
        {
            base.EndInit();

            if (this.Host2 == null)
            {
                this.Host2 = this.Host;
            }

            this.ipEndPoint  = NetworkHelper.ToIPEndPoint(this.Host, this.Port);
            this.ipEndPoint2 = NetworkHelper.ToIPEndPoint(this.Host2, this.Port);
        }
Example #11
0
        public async void Broadcast2Kad(int kIndex, IMessage message)
        {
            List <NodeData> result = GetkList(kIndex);

            for (int i = 0; i < result.Count; i++)
            {
                NodeData node    = result[i];
                Session  session = await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));

                if (session != null && session.IsConnect())
                {
                    session.Send(message);
                }
            }
        }
Example #12
0
        public async void Broadcast(P2P_NewBlock p2p_Block, Block block)
        {
            var myNodeId = GetMyNodeId();

            for (int i = 0; i < nodes.Count; i++)
            {
                NodeData node = nodes[i];
                if (node.nodeId != myNodeId)
                {
                    Session session = await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));

                    if (session != null && session.IsConnect())
                    {
                        session.Send(p2p_Block);
                    }
                }
            }
        }
Example #13
0
        public async void OnLogin()
        {
            SessionWrap sessionWrap = null;

            try
            {
                IPEndPoint connetEndPoint = NetworkHelper.ToIPEndPoint(ServerIP);

                Session session = Game.Scene.GetComponent <NetOuterComponent>().Create(connetEndPoint);
                sessionWrap = new SessionWrap(session);
                R2C_Login r2CLogin = (R2C_Login)await sessionWrap.Call(new C2R_Login()
                {
                    Account = nickname.text, Password = "******"
                });

                sessionWrap.Dispose();

                connetEndPoint = NetworkHelper.ToIPEndPoint(r2CLogin.Address);
                Session gateSession = Game.Scene.GetComponent <NetOuterComponent>().Create(connetEndPoint);
                Game.Scene.AddComponent <SessionWrapComponent>().Session = new SessionWrap(gateSession);
                Game.Scene.AddComponent <SessionComponent>().Session     = gateSession;
                //G2C_LoginGate g2CLoginGate = (G2C_LoginGate)await SessionWrapComponent.Instance.Session.Call(new C2G_LoginGate() { Key = r2CLogin.Key });

                G2C_LoginGate g2CLoginGate = (G2C_LoginGate)await Game.Scene.GetComponent <SessionWrapComponent>().Session.Call(new C2G_LoginGate()
                {
                    Key = r2CLogin.Key
                });

                Log.Info("登陆gate成功!");

                // 创建Player
                Player          player          = ETModel.ComponentFactory.CreateWithId <Player>(g2CLoginGate.PlayerId);
                PlayerComponent playerComponent = ETModel.Game.Scene.GetComponent <PlayerComponent>();
                playerComponent.MyPlayer = player;

                uiLogin.SetActive(false);
                uiLobby.SetActive(true);
            }
            catch (Exception e)
            {
                Log.Error(e.ToString());
            }
        }
Example #14
0
        public async Task <Block> QueryBlock(string hash, string ipEndPoint = null)
        {
            Q2P_Block q2p_Block = new Q2P_Block();

            q2p_Block.ActorId = nodeManager.GetMyNodeId();
            q2p_Block.hash    = hash;

            Session session = null;

            if (ipEndPoint != null && ipEndPoint != "")
            {
                session = await networkInner.Get(NetworkHelper.ToIPEndPoint(ipEndPoint));
            }
            if (session != null && !session.IsConnect())
            {
                session = null;
            }

            Block blk = null;

            //if (session == null)
            {
                NodeManager.NodeData node = nodeManager.GetRandomNode();
                if (node != null)
                {
                    session = await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));
                }
            }

            if (session != null)
            {
                R2P_Block r2p_Block = (R2P_Block)await session.Query(q2p_Block);

                if (r2p_Block != null && r2p_Block.block != "")
                {
                    blk = JsonHelper.FromJson <Block>(r2p_Block.block);
                }
            }

            return(blk);
        }
Example #15
0
        public async Task <string> QueryMcBlockHash(long height, string ipEndPoint = null)
        {
            Q2P_McBlockHash q2p_mcBlockHash = new Q2P_McBlockHash();

            q2p_mcBlockHash.ActorId = nodeManager.GetMyNodeId();
            q2p_mcBlockHash.height  = height;

            Session session = null;

            if (ipEndPoint != null && ipEndPoint != "")
            {
                session = await networkInner.Get(NetworkHelper.ToIPEndPoint(ipEndPoint));
            }
            if (session != null && !session.IsConnect())
            {
                session = null;
            }

            string hash = "";

            if (session == null)
            {
                NodeManager.NodeData node = nodeManager.GetRandomNode();
                if (node != null)
                {
                    session = await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));
                }
            }

            if (session != null)
            {
                R2P_McBlockHash r2p_McBlock = (R2P_McBlockHash)await session.Query(q2p_mcBlockHash);

                if (r2p_McBlock != null)
                {
                    hash = r2p_McBlock.hash;
                }
            }

            return(hash);
        }
Example #16
0
 public void Awake(NetworkProtocol protocol, string address)
 {
     try
     {
         IPEndPoint ipEndPoint;
         switch (protocol)
         {
         case NetworkProtocol.TCP:
             ipEndPoint   = NetworkHelper.ToIPEndPoint(address);
             this.Service = new TService(ipEndPoint, this.OnAccept)
             {
                 Parent = this
             };
             break;
         }
     }
     catch (Exception e)
     {
         throw new Exception($"NetworkComponent Awake Error {address}", e);
     }
 }
Example #17
0
        // 如果收到的是桶外的数据 , 向K桶内进行一次广播
        public bool IsNeedBroadcast2Kad(string _ipEndPoint)
        {
            if (string.IsNullOrEmpty(_ipEndPoint))
            {
                return(false);
            }

            var ipEndPoint = NetworkHelper.ToIPEndPoint(_ipEndPoint);

            NodeData nodetarget = nodes.Find((n) => { return(n.nodeId == StringHelper.HashCode(_ipEndPoint)); });
            NodeData nodeSelf   = nodes.Find((n) => { return(n.nodeId == GetMyNodeId()); });

            if (nodetarget != null && nodeSelf != null)
            {
                if (nodetarget.kIndex != nodeSelf.kIndex)
                {
                    return(true);
                }
            }
            return(false);
        }
Example #18
0
        public void Awake(NetworkProtocol protocol, string address, int packetSize = Packet.PacketSizeLength2)
        {
            try
            {
                IPEndPoint ipEndPoint;
                switch (protocol)
                {
                case NetworkProtocol.KCP:
                    ipEndPoint   = NetworkHelper.ToIPEndPoint(address);
                    this.Service = new KService(ipEndPoint, this.OnAccept)
                    {
                        Parent = this
                    };
                    break;

                case NetworkProtocol.TCP:
                    ipEndPoint = NetworkHelper.ToIPEndPoint(address);
                    //OnAccept客户端连接后的处理回调 同时将自己设置为TService的Parent父物体
                    //那么这个外网组件销毁的时候 会将TService也销毁
                    this.Service = new TService(packetSize, ipEndPoint, this.OnAccept)
                    {
                        Parent = this
                    };
                    break;

                case NetworkProtocol.WebSocket:
                    string[] prefixs = address.Split(';');
                    this.Service = new WService(prefixs, this.OnAccept)
                    {
                        Parent = this
                    };
                    break;
                }
            }
            catch (Exception e)
            {
                throw new Exception($"NetworkComponent Awake Error {address}", e);
            }
        }
Example #19
0
        public async Task <List <string> > QueryBeLinkHash(string hash, string ipEndPoint = null)
        {
            Q2P_BeLinkHash q2p_BeLinkHash = new Q2P_BeLinkHash();

            q2p_BeLinkHash.ActorId = nodeManager.GetMyNodeId();
            q2p_BeLinkHash.hash    = hash;

            Session session = null;

            if (ipEndPoint != null && ipEndPoint != "")
            {
                session = await networkInner.Get(NetworkHelper.ToIPEndPoint(ipEndPoint));
            }
            if (session != null && !session.IsConnect())
            {
                session = null;
            }

            if (session == null)
            {
                NodeManager.NodeData node = nodeManager.GetRandomNode();
                if (node != null)
                {
                    session = await networkInner.Get(NetworkHelper.ToIPEndPoint(node.ipEndPoint));
                }
            }

            if (session != null)
            {
                R2P_BeLinkHash r2p_BeLinkHash = (R2P_BeLinkHash)await session.Query(q2p_BeLinkHash);

                if (r2p_BeLinkHash != null && r2p_BeLinkHash.hashs != null && r2p_BeLinkHash.hashs != "")
                {
                    return(JsonHelper.FromJson <List <string> >(r2p_BeLinkHash.hashs));
                }
            }

            return(null);
        }
Example #20
0
        public void Awake(NetworkProtocol protocol, string address, int packetSize = Packet.PacketSizeLength4)
        {
            try
            {
                IPEndPoint ipEndPoint;
                switch (protocol)
                {
                case NetworkProtocol.KCP:
                    ipEndPoint   = NetworkHelper.ToIPEndPoint(address);
                    this.Service = new KService(ipEndPoint, (channel) => { this.OnAccept(channel); })
                    {
                        Parent = this
                    };
                    break;

                case NetworkProtocol.TCP:
                    ipEndPoint   = NetworkHelper.ToIPEndPoint(address);
                    this.Service = new TService(packetSize, ipEndPoint, (channel) => { this.OnAccept(channel); })
                    {
                        Parent = this
                    };
                    break;

                case NetworkProtocol.WebSocket:
                    string[] prefixs = address.Split(';');
                    this.Service = new WService(prefixs, (channel) => { this.OnAccept(channel); })
                    {
                        Parent = this
                    };
                    break;
                }
            }
            catch (Exception e)
            {
                throw new Exception($"NetworkComponent Awake Error {address}", e);
            }
        }
Example #21
0
        public override void EndInit()
        {
            base.EndInit();

            this.IPEndPoint = NetworkHelper.ToIPEndPoint(this.Host, this.Port);
        }
Example #22
0
        public override AChannel ConnectChannel(string address)
        {
            IPEndPoint ipEndPoint = NetworkHelper.ToIPEndPoint(address);

            return(this.ConnectChannel(ipEndPoint));
        }
        public override void Awake(JToken jd = null)
        {
            if (jd == null)
            {
                return;
            }

            if (jd.Parent != null && jd.Parent.Parent != null && jd.Parent.Parent["appType"] != null)
            {
                string[] array = jd.Parent.Parent["appType"].ToString().Replace(" ", "").Split('|');
                for (int i = 0; i < array.Length; i++)
                {
                    if (array[i] != "")
                    {
                        appType |= (int)Enum.Parse(typeof(AppType), array[i]);
                    }
                }
            }

            protocol = NetworkProtocol.TCP;

            if (jd["protocol"] != null)
            {
                Enum.TryParse <NetworkProtocol>(jd["protocol"].ToString(), out protocol);
            }

            address = jd["address"]?.ToString();
            if (address != null && address != "" && protocol != NetworkProtocol.HttpSocket)
            {
                ipEndPoint = NetworkHelper.ToIPEndPoint(address);
            }
            else
            {
                ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
            }

            if (jd["MessagePacker"]?.ToString() == "ProtobufPacker")
            {
                MessagePacker = new ProtobufPacker();
            }
            else
            {
                MessagePacker = new MongoPacker();
            }

            try
            {
                switch (protocol)
                {
                case NetworkProtocol.KCP:
                    this.Service = new KService(ipEndPoint, this.OnAccept);
                    break;

                case NetworkProtocol.TCP:
                    this.Service = new TService(ipEndPoint, this.OnAccept);
                    break;

                case NetworkProtocol.WebSocket:
                    this.Service = new WService(address.Split(';'), this.OnAccept);
                    break;

                case NetworkProtocol.HttpSocket:
                    string[] prefixs = address.Split(';');
                    Boolean.TryParse(jd["website"]?.ToString(), out bool website);
                    this.Service = new HttpService(prefixs[0], website, this.OnAccept);
                    break;
                }
            }
            catch (Exception e)
            {
                Log.Debug($"创建KService失败!{e.Message}");
                //throw new Exception($"NetworkComponent Awake Error {address}", e);
            }

            ipEndPoint        = this.Service.GetEndPoint();
            IdGenerater.AppId = ipEndPoint.Port;

            if (jd["CheckHearBeat"] != null && this.Service != null)
            {
                this.Service.CheckHearBeat = jd["CheckHearBeat"].ToObject <bool>();
            }

            if (jd["CheckKcpWaitsnd"] != null && this.Service != null)
            {
                this.Service.CheckKcpWaitsnd = jd["CheckKcpWaitsnd"].ToObject <bool>();
            }
        }
Example #24
0
 public override IPEndPoint GetEndPoint()
 {
     return(NetworkHelper.ToIPEndPoint(prefix.ToLower().Replace("http://", "").Replace("/", "")));
 }
Example #25
0
 public override void EndInit()
 {
     this.IPEndPoint = NetworkHelper.ToIPEndPoint(this.Address);
 }
Example #26
0
        public async void Run(bool bRun)
        {
            await Task.Delay(1 * 1000);

            List <string> list = JsonHelper.FromJson <List <string> >(Program.jdNode["NodeSessions"].ToString());

            // Get Internet IP
            try
            {
                Session session = await networkInner.Get(NetworkHelper.ToIPEndPoint(list[0]));

                Q2P_IP_INFO qIPNode = new Q2P_IP_INFO();
                R2P_IP_INFO rIPNode = (R2P_IP_INFO)await session.Query(qIPNode, 0.3f);

                networkInner.ipEndPoint = NetworkHelper.ToIPEndPoint(GetIpV4() + ":" + networkInner.ipEndPoint.Port);
                if (rIPNode != null)
                {
                    networkInner.ipEndPoint = NetworkHelper.ToIPEndPoint(rIPNode.address + ":" + networkInner.ipEndPoint.Port);
                }
            }
            catch (Exception)
            {
            }
            Log.Info($"NodeManager  {networkInner.ipEndPoint.ToString()}");
            Log.Info($"NodeSessions {list[0]}");

            //
            Q2P_New_Node new_Node = new Q2P_New_Node();

            new_Node.ActorId    = GetMyNodeId();
            new_Node.address    = Wallet.GetWallet().GetCurWallet().ToAddress();
            new_Node.ipEndPoint = networkInner.ipEndPoint.ToString();

            long state     = 0;
            var  consensus = Entity.Root.GetComponent <Consensus>();

            if (consensus != null)
            {
                state |= consensus.transferShow ? EnumState.transferShow : 0;
                state |= consensus.openSyncFast ? EnumState.openSyncFast : 0;
            }
            state           |= Entity.Root.GetComponentInChild <RelayNetwork>() != null ? EnumState.RelayNetwork : 0;
            new_Node.state   = state;
            new_Node.version = BlockMgr.networkID;

            while (bRun && list.Count > 0)
            {
                try
                {
                    for (int ii = 0; ii < list.Count; ii++)
                    {
                        bool bResponse = false;
                        new_Node.HashCode = StringHelper.HashCode(JsonHelper.ToJson(nodes));
                        Session session = await networkInner.Get(NetworkHelper.ToIPEndPoint(list[ii]));

                        if (session != null && session.IsConnect())
                        {
                            //Log.Debug($"NodeSessions connect " + r2P_New_Node.ActorId);
                            //session.Send(new_Node);

                            long         sendTime     = TimeHelper.Now();
                            R2P_New_Node r2P_New_Node = (R2P_New_Node)await session.Query(new_Node, 3f);

                            if (r2P_New_Node != null)
                            {
                                long timeNow = TimeHelper.Now();
                                nodeTimeOffset = (timeNow - sendTime) / 2 + r2P_New_Node.nodeTime - timeNow;
                                if (!string.IsNullOrEmpty(r2P_New_Node.Nodes))
                                {
                                    nodes = JsonHelper.FromJson <List <NodeData> >(r2P_New_Node.Nodes);
                                }
                                if (!string.IsNullOrEmpty(r2P_New_Node.Message))
                                {
                                    Log.Warning($"NodeSessions: {r2P_New_Node.Message}");
                                }
                                bResponse = true;
                            }
                        }
                        if (bResponse)
                        {
                            break;
                        }
                    }

                    // 等待5秒后关闭连接
                    await Task.Delay(5 * 1000);
                }
                catch (Exception)
                {
                    await Task.Delay(5 * 1000);
                }
            }
        }