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); } }
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); }
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); } }
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); } }
public override void EndInit() { base.EndInit(); this.IPEndPoint = NetworkHelper.ToIPEndPoint(this.Host, this.Port); }
public override AChannel ConnectChannel(string address) { IPEndPoint ipEndPoint = NetworkHelper.ToIPEndPoint(address); return(this.ConnectChannel(ipEndPoint)); }
public override void EndInit() { this.IPEndPoint = NetworkHelper.ToIPEndPoint(this.Address); }
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); } } }
public override IPEndPoint GetEndPoint() { return(NetworkHelper.ToIPEndPoint(prefix.ToLower().Replace("http://", "").Replace("/", ""))); }
private static void Main(string[] args) { Dictionary <string, string> param = new Dictionary <string, string>(); for (int i = 0; i < args.Length; i++) { int jj = args[i].IndexOf(':'); if (jj != -1) { param.TryAdd(args[i].Substring(0, jj).Replace("-", ""), args[i].Substring(jj + 1, args[i].Length - (jj + 1))); } else { param.TryAdd(args[i].Replace("-", ""), "true"); } } param.TryAdd("configure", ""); param.TryAdd("node", "All"); param.TryAdd("wallet", "./Data/wallet.json"); param.TryAdd("db", "./Data/LevelDB"); param.TryAdd("node", "All"); if (param.TryGetValue("index", out string index)) { param["wallet"] = param["wallet"].Replace(".json", $"{index}.json"); param["db"] = param["db"] + index; } if (param.ContainsKey("miner")) { RandomXSharp.RandomX.randomx_init(param.ContainsKey("fullmem")); Entity.Root.AddComponent <Miner>().Init(param); Update(); return; } RandomXSharp.RandomX.randomx_init(false); //RandomXSharp.RandomX.Test1(args); //return; //Wallet.Import(""); //return; //BigHelper.Test(); //return; //CalculatePower.Test(); //return; //Wallet.Test2(); //return; //Wallet.Test3(); //return; // 测试代码 //LuaVMEnv.TestRapidjson(args); //LuaVMEnv.TestLib(args); //LuaVMEnv.TestCoroutine(args); //LuaVMEnv.Test_number(args); //LevelDBStore.test_delete(args); //LevelDBStore.test_undo(args); //LevelDBStore.Export2CSV_Block(args); //LevelDBStore.test_ergodic(args); //return; //Log.Info(Environment.CurrentDirectory); if (param.TryGetValue("makeSnapshot", out string _)) { LevelDBStore.MakeSnapshot(param); return; } string walletFile = param["wallet"]; Wallet wallet = Wallet.GetWallet(walletFile); if (wallet == null) { return; } if (param.TryGetValue("makeGenesis", out string _)) { Consensus.MakeGenesis(); return; } //DisbleQuickEditMode(); Console.Clear(); Console.CursorVisible = false; #if !RELEASE Console.Title = $"SmartX 配置: {param["configure"]} {index} Address: {wallet.GetCurWallet().ToAddress()} Debug"; #else Console.Title = $"SmartX 配置: {param["configure"]} {index} Address: {wallet.GetCurWallet().ToAddress()} Release"; #endif Log.Debug($"address: {wallet.GetCurWallet().ToAddress()}"); string NodeKey = param["node"]; // 异步方法全部会回调到主线程 SynchronizationContext.SetSynchronizationContext(OneThreadSynchronizationContext.Instance); AssemblyHelper.AddAssembly("Base", typeof(AssemblyHelper).Assembly); AssemblyHelper.AddAssembly("App", typeof(Program).Assembly); // check contract var contractHash = FileHelper.HashDirectory("Data/Contract", CryptoHelper.Sha256); if (contractHash != "da4d968db3d8a7360873221cb917c9fcb073600968c2e88a22640b90c529d0f1") { Log.Debug($"contractHash error: {contractHash}"); #if RELEASE return; #endif } // 读取配置文件 try { StreamReader sr = new StreamReader(new FileStream(param["configure"], FileMode.Open, FileAccess.Read, FileShare.ReadWrite), System.Text.Encoding.UTF8); string strTxt = sr.ReadToEnd(); strTxt = strTxt.Replace("0.0.0.0", NodeManager.GetIpV4()); sr.Close(); sr.Dispose(); JToken jd = JToken.Parse(strTxt); jdNode = jd[NodeKey]; } catch (Exception e) { Log.Info(e.ToString()); Log.Error($"configure file: {param["configure"]} on exists ro json foramt error."); Console.ReadKey(); return; } if (jdNode != null) { Log.Debug("启动: " + jdNode["appType"]); // DNS List <string> list = JsonHelper.FromJson <List <string> >(jdNode["NodeSessions"].ToString()); for (int ii = 0; ii < list.Count; ii++) { list[ii] = NetworkHelper.DnsToIPEndPoint(list[ii]); } jdNode["NodeSessions"] = JsonHelper.ToJson(list); if (!string.IsNullOrEmpty(index)) { if (jdNode["HttpRpc"] != null) { jdNode["HttpRpc"]["ComponentNetworkHttp"]["address"] = ((string)jdNode["HttpRpc"]["ComponentNetworkHttp"]["address"]).Replace("8101", (8100 + int.Parse(index)).ToString()); } if (jdNode["HttpPool"] != null) { jdNode["HttpPool"]["ComponentNetworkHttp"]["address"] = ((string)jdNode["HttpPool"]["ComponentNetworkHttp"]["address"]).Replace("9101", (9100 + int.Parse(index)).ToString()); } if (jdNode["SmartxRpc"] != null) { jdNode["SmartxRpc"]["ComponentNetworkHttp"]["address"] = ((string)jdNode["SmartxRpc"]["ComponentNetworkHttp"]["address"]).Replace("5000", ((5000 - 1) + int.Parse(index)).ToString()); } if (jdNode["ComponentNetworkInner"] != null) { jdNode["ComponentNetworkInner"]["address"] = ((string)jdNode["ComponentNetworkInner"]["address"]).Replace("58601", (58600 + int.Parse(index)).ToString()); } if (jdNode["RelayNetwork"] != null) { jdNode["RelayNetwork"]["ComponentNetworkInner"]["address"] = ((string)jdNode["RelayNetwork"]["ComponentNetworkInner"]["address"]).Replace("57601", (57600 + int.Parse(index)).ToString()); } if (jdNode["Pool"] != null) { jdNode["Pool"]["db_path"] = ((string)jdNode["Pool"]["db_path"]) + index; } if (jdNode["HttpPoolRelay"] != null) { jdNode["HttpPoolRelay"]["number"] = jdNode["HttpPoolRelay"]["number"].ToString().Replace("Pool1", "Pool" + index); } } // 数据库路径 if (jdNode["LevelDBStore"] != null && args.Length >= 3) { jdNode["LevelDBStore"]["db_path"] = param["db"]; } Entity.Root.AddComponent <ComponentStart>(jdNode); } //TransferProcess.Test(); Update(); }
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>(); } }
private static void Main(string[] args) { Dictionary <string, string> param = new Dictionary <string, string>(); for (int i = 0; i < args.Length; i++) { int jj = args[i].IndexOf(':'); if (jj != -1) { param.TryAdd(args[i].Substring(0, jj).Replace("-", ""), args[i].Substring(jj + 1, args[i].Length - (jj + 1))); } else { param.TryAdd(args[i].Replace("-", ""), "true"); } } param.TryAdd("configure", ""); param.TryAdd("node", "All"); param.TryAdd("wallet", "./Data/wallet.json"); param.TryAdd("db", "./Data/LevelDB"); if (param.TryGetValue("index", out string index)) { param["wallet"] = param["wallet"].Replace(".json", $"{index}.json"); param["db"] = param["db"] + index; } if (param.TryGetValue("miner", out string tmp1)) { Entity.Root.AddComponent <Miner>().Init(param); Update(); return; } //// DAG 创建测试 //char[] dag = new char[1024*1024*10]; //var hash = CryptoHelper.Sha256("sat dag"); //var count = dag.Length / hash.Length; //int dagIndex = 0; //for (int ii = 0; ii < count; ii++) //{ // hash = CryptoHelper.Sha256(hash); // for (int jj = 0; jj < hash.Length; jj++) // { // dag[dagIndex++] = hash[jj]; // } //} //BigHelper.Test(); //return; //CalculatePower.Test(); //return; //Wallet.Test2(); //return; //Wallet.Test3(); //return; // 测试代码 //LuaVMEnv.TestRapidjson(args); //LuaVMEnv.TestLib(args); //LuaVMEnv.TestCoroutine(args); //LuaVMEnv.Test_number(args); //LevelDBStore.test_delete(args); //LevelDBStore.test_undo(args); //LevelDBStore.Export2CSV_Block(args); //LevelDBStore.test_ergodic(args); //return; //Log.Info(Environment.CurrentDirectory); string walletFile = param["wallet"]; Wallet wallet = Wallet.GetWallet(walletFile); if (wallet == null) { return; } if (param.TryGetValue("makeGenesis", out string tmp2)) { Consensus.MakeGenesis(); return; } //DisbleQuickEditMode(); Console.Clear(); Console.CursorVisible = false; Console.Title = $"SmartX 配置: {param["configure"]} {index} Address: {wallet.GetCurWallet().ToAddress()}"; Log.Debug($"address: {wallet.GetCurWallet().ToAddress()}"); string NodeKey = param["node"]; // 异步方法全部会回调到主线程 SynchronizationContext.SetSynchronizationContext(OneThreadSynchronizationContext.Instance); AssemblyHelper.AddAssembly("Base", typeof(AssemblyHelper).Assembly); AssemblyHelper.AddAssembly("App", typeof(Program).Assembly); // 读取配置文件 try { StreamReader sr = new StreamReader(new FileStream(param["configure"], FileMode.Open, FileAccess.Read, FileShare.ReadWrite), System.Text.Encoding.UTF8); string strTxt = sr.ReadToEnd(); strTxt = strTxt.Replace("0.0.0.0", NodeManager.GetIpV4()); sr.Close(); sr.Dispose(); JToken jd = JToken.Parse(strTxt); jdNode = jd[NodeKey]; } catch (Exception e) { Log.Info(e.ToString()); Log.Error($"configure file: {param["configure"]} on exists ro json foramt error."); Console.ReadKey(); return; } if (jdNode != null) { Log.Debug("启动: " + jdNode["appType"]); // DNS List <string> list = JsonHelper.FromJson <List <string> >(jdNode["NodeSessions"].ToString()); for (int ii = 0; ii < list.Count; ii++) { list[ii] = NetworkHelper.DnsToIPEndPoint(list[ii]).ToString(); } jdNode["NodeSessions"] = JsonHelper.ToJson(list); if (!string.IsNullOrEmpty(index)) { if (jdNode["HttpRpc"] != null) { jdNode["HttpRpc"]["ComponentNetworkHttp"]["address"] = ((string)jdNode["HttpRpc"]["ComponentNetworkHttp"]["address"]).Replace("8101", (8100 + int.Parse(index)).ToString()); } if (jdNode["HttpRpc"] != null) { jdNode["HttpPool"]["ComponentNetworkHttp"]["address"] = ((string)jdNode["HttpPool"]["ComponentNetworkHttp"]["address"]).Replace("9101", (9100 + int.Parse(index)).ToString()); } if (jdNode["HttpRpc"] != null) { jdNode["SmartxRpc"]["ComponentNetworkHttp"]["address"] = ((string)jdNode["SmartxRpc"]["ComponentNetworkHttp"]["address"]).Replace("5000", ((5000 - 1) + int.Parse(index)).ToString()); } if (jdNode["HttpRpc"] != null) { jdNode["ComponentNetworkInner"]["address"] = ((string)jdNode["ComponentNetworkInner"]["address"]).Replace("58601", (58600 + int.Parse(index)).ToString()); } if (jdNode["RelayNetwork"] != null) { jdNode["RelayNetwork"]["ComponentNetworkInner"]["address"] = ((string)jdNode["RelayNetwork"]["ComponentNetworkInner"]["address"]).Replace("57601", (57600 + int.Parse(index)).ToString()); } if (jdNode["Pool"] != null) { jdNode["Pool"]["db_path"] = ((string)jdNode["Pool"]["db_path"]) + index; } } // 数据库路径 if (jdNode["LevelDBStore"] != null && args.Length >= 3) { jdNode["LevelDBStore"]["db_path"] = param["db"]; } Entity.Root.AddComponent <ComponentStart>(jdNode); } Update(); }