protected override void Run(Session session, UnitSnapshotMsg message) { Debug.Log("Handle"); ETModel.Game.Scene.GetComponent <LatencyComponent>().AddAMsgLan(message.Time - TimeHelper.GetCurrentTimeUnix()); UnitComponent unitComponent = ETModel.Game.Scene.GetComponent <UnitComponent>(); for (int i = 0; i < message.Units.Count; i++) { if (unitComponent.Get(message.Units[i].Id) == null) { //UpdateInfo; continue; } else { Unit u = (unitComponent.Get(message.Units[i].Id)); u.mInputAssignment = (InputAssignment)message.Units[i].Info.InputAssignment; // u.GetComponent<FrameMoveComponent>().moveData.posX = message.Units[i].MoveComponentBytes.PosX; // u.GetComponent<FrameMoveComponent>().moveData.posY = message.Units[i].MoveComponentBytes.PosY; } } }
public void Awake() { timer = TimeSpanHelper.GetTimer(this.GetHashCode()); timer.interval = restoreTimeSpan; timer.timing = TimeHelper.Now(); }
public KService() { this.TimeNow = (uint)TimeHelper.Now(); this.socket = new UdpClient(new IPEndPoint(IPAddress.Any, 0)); this.StartRecv(); }
public void ThreadRun(object data) { System.Threading.Thread.Sleep(1000); // check url rulerRpc = rulerRpc ?? Entity.Root.Find("SmartxRpc")?.GetComponent <SmartxRpc>()?.GetIPEndPoint(); if (httpPoolRelay != null && GetHeight(rulerRpc, 5) == 0) { Log.Error($"rulerRpc: {rulerRpc} can't connect"); System.Diagnostics.Process.GetCurrentProcess().Kill(); return; } LoadTransferFromDB(); List <TransferHandle> transfersDel = new List <TransferHandle>(); Dictionary <string, Account> accounts = new Dictionary <string, Account>(); var timePassInfo = new TimePass(15 * 6); while (true) { System.Threading.Thread.Sleep(1000); // Query success try { lock (this) { if (runAction != null) { runAction?.Invoke(); runAction = null; SaveTransferToDB(); } } if (!timePassInfo.IsPassSet()) { continue; } transfersDel.Clear(); for (int ii = 0; ii < transfers.Count; ii++) { if (transfers[ii].sendCount <= 5) { if (string.IsNullOrEmpty(transfers[ii].unique)) { transfersDel.Add(transfers[ii]); continue; } var transfer = GetUniqueTransfer(rulerRpc, transfers[ii].unique); if (transfer != null) { if (transfer.data == transfers[ii].unique && transfer.height != 0) { transfers[ii].hash = transfer.hash; transfersDel.Add(transfers[ii]); } } } else { File.AppendAllText("./TransferBad.csv", JsonHelper.ToJson(transfers[ii]) + "\n", Encoding.UTF8); transfersDel.Add(transfers[ii]); } } using (DbSnapshot snapshot = Entity.Root.GetComponent <Pool>().PoolDBStore.GetSnapshot()) { bool remove = transfersDel.Count != 0; // Successfully deleted from table foreach (var it in transfersDel) { if (!string.IsNullOrEmpty(it.unique) && !string.IsNullOrEmpty(it.hash)) { snapshot.Add($"unique_{it.unique}", it.hash); // Add to transaction cross reference table } transfers.Remove(it); } if (remove) { snapshot.Commit(); } } accounts.Clear(); long curHeight = GetHeight(rulerRpc); if (curHeight == 0) { Log.Warning($"rulerRpc: {rulerRpc} can't connect"); continue; } // Start a new deal bool bSaveDb = false; for (int ii = transfers.Count - 1; ii >= 0; ii--) { if (transfers[ii].lastHeight < curHeight - 18 && transfers[ii].sendCount <= 5) { transfers[ii].lastHeight = curHeight; transfers[ii].sendCount++; if (BigHelper.Less(transfers[ii].amount, "0", true)) { transfers.RemoveAt(ii); continue; } Account account = null; if (!accounts.TryGetValue(transfers[ii].addressIn, out account)) { account = GetAccount(rulerRpc, transfers[ii].addressIn); if (account == null) { continue; } accounts.Add(transfers[ii].addressIn, account); } BlockSub transfer = new BlockSub(); transfer.addressIn = transfers[ii].addressIn; transfer.addressOut = transfers[ii].addressOut; transfer.amount = transfers[ii].amount; transfer.type = "transfer"; transfer.nonce = ++account.nonce; transfer.timestamp = TimeHelper.Now(); transfer.data = transfers[ii].unique; transfer.extend = new List <string>(); //transfer.extend.Add($"deadline:{curHeight + 16}"); transfer.extend.Add($"unique"); transfer.hash = transfer.ToHash(); transfer.sign = transfer.ToSign(Wallet.GetWallet().GetCurWallet()); //int rel = Entity.Root.GetComponent<Rule>().AddTransfer(transfer, false); int rel = SendTransfer(rulerRpc, transfer); if (rel == -1) { transfers[ii].sendCount--; continue; } if (rel != 1) { File.AppendAllText("./TransferBad.csv", JsonHelper.ToJson(transfers[ii]) + "\n", Encoding.UTF8); Log.Error($"TransferProcess: aAddTransfer Error! {rel}"); transfers.RemoveAt(ii); } bSaveDb = true; } } if (bSaveDb) { SaveTransferToDB(); } } catch (Exception) { Log.Warning($"TransferProcess throw Exception: {rulerRpc}"); } } }
public long GetNodeTime() { return(TimeHelper.Now() + nodeTimeOffset); }
public void AddSession(long id) { _sessionTimes.Add(id, TimeHelper.ClientNowSeconds()); }
public void Awake() { this.LastSendTime = TimeHelper.Now(); this.tcs = null; this.CancellationTokenSource = new CancellationTokenSource(); }
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; while (bRun && list.Count > 0) { new_Node.version = NodeManager.networkIDCur; 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 void Send(IMessage message) { message.Time = TimeHelper.GetCurrentTimeUnix(); this.Send(0x00, message); }
public static async void TestPledge(HttpMessage httpMessage) { if (Wallet.GetWallet().keys.Count < 1000) { for (int ii = Wallet.GetWallet().keys.Count; ii < 1000; ii++) { Wallet.GetWallet().Create("123"); } Wallet.GetWallet().SaveWallet(); Log.Info("TestPledge create"); Session session2 = null; for (int ii = 1; ii < 1000; ii++) { int random1 = 0; int random2 = ii; int random3 = 100000; BlockSub transfer = new BlockSub(); transfer.type = "transfer"; transfer.addressIn = Wallet.GetWallet().keys[random1].ToAddress(); transfer.addressOut = Wallet.GetWallet().keys[random2].ToAddress(); transfer.amount = random3.ToString(); transfer.data = $""; transfer.depend = ""; transfer.nonce = HttpRpc.GetAccountNotice(transfer.addressIn, false); transfer.timestamp = TimeHelper.Now(); transfer.hash = transfer.ToHash(); transfer.sign = transfer.ToSign(Wallet.GetWallet().keys[random1]); session2 = await HttpRpc.OnTransferAsync2(transfer, session2); while (session2 == null) { session2 = await HttpRpc.OnTransferAsync2(transfer, session2); } ; } } else { var consensus = Entity.Root.GetComponent <Consensus>(); var accountCount = Wallet.GetWallet().keys.Count; Session session2 = null; while (true) { Log.Info("TestPledge start"); session2 = null; for (int ii = 0; ii < 200; ii++) { int random1 = RandomHelper.Range(1, accountCount); int random2 = RandomHelper.Range(1, accountCount); while (random1 == random2) { random2 = RandomHelper.Range(1, accountCount); } BlockSub transfer = new BlockSub(); transfer.type = "contract"; transfer.addressIn = Wallet.GetWallet().keys[random1].ToAddress(); transfer.amount = ""; transfer.depend = ""; transfer.nonce = HttpRpc.GetAccountNotice(transfer.addressIn); transfer.timestamp = TimeHelper.Now(); var rules = consensus.GetRule(consensus.transferHeight).Select(x => x.Value.Contract).ToList(); rules.Remove(""); rules.Remove(null); int callFunIndex = RandomHelper.Range(0, 3); if (callFunIndex == 0) { int random3 = RandomHelper.Range(1, 1000); transfer.data = $"addLiquidity(\"{random3}\",\"{random3}\")"; transfer.addressOut = rules[RandomHelper.Range(0, rules.Count) % rules.Count]; } else if (callFunIndex == 1) { int random3 = RandomHelper.Range(1, 1000); transfer.data = $"removeLiquidity(\"{random3}\")"; transfer.addressOut = rules[RandomHelper.Range(0, rules.Count) % rules.Count]; } else if (callFunIndex == 2) { int random3 = (int)consensus.transferHeight - RandomHelper.Range(1, 10); transfer.data = $"retrieved(\"{random3}\",\"{random3}\")"; transfer.addressOut = rules[RandomHelper.Range(0, rules.Count) % rules.Count]; } else if (callFunIndex == 3) { int random3 = (int)consensus.transferHeight - RandomHelper.Range(1, 10); transfer.data = $"diversionLiquidity(\"{random3}\",\"{rules[RandomHelper.Range(0, rules.Count) % rules.Count]}\")"; transfer.addressOut = rules[RandomHelper.Range(0, rules.Count) % rules.Count]; } else if (callFunIndex == 4) { int random3 = (int)consensus.transferHeight - RandomHelper.Range(1, 10); transfer.data = $"cancel(\"{rules[RandomHelper.Range(0, rules.Count) % rules.Count]}\",\"{random3}\")"; transfer.addressOut = consensus.PledgeFactory; } transfer.hash = transfer.ToHash(); transfer.sign = transfer.ToSign(Wallet.GetWallet().keys[random1]); session2 = await HttpRpc.OnTransferAsync2(transfer, session2); while (session2 == null) { session2 = await HttpRpc.OnTransferAsync2(transfer, session2); } ; } await Task.Delay(1000); } } }
// 开启协程移动,每100毫秒移动一次,并且协程取消的时候会计算玩家真实移动 // 比方说玩家移动了250毫秒,玩家有新的目标,这时旧的移动协程结束,将计算250毫秒移动的位置,而不是300毫秒移动的位置 public async ETTask StartMove(CancellationToken cancellationToken) { Unit unit = this.GetParent <Unit>(); this.StartPos = unit.Position; this.StartTime = TimeHelper.Now(); float distance = (this.Target - this.StartPos).magnitude; if (Math.Abs(distance) < 0.1f) { return; } this.needTime = (long)(distance / this.moveSpeed * 1000); TimerComponent timerComponent = Game.Scene.GetComponent <TimerComponent>(); // 协程如果取消,将算出玩家的真实位置,赋值给玩家 cancellationToken.Register(() => { long timeNow = TimeHelper.Now(); if (timeNow - this.StartTime >= this.needTime) { unit.Position = this.Target; if (this.GetParent <Unit>().UnitType == UnitType.Player) { Console.WriteLine(" MoveComponent-77-unitPos: " + unit.UnitType + " " + unit.Position.ToString()); } } else { float amount = (timeNow - this.StartTime) * 1f / this.needTime; unit.Position = Vector3.Lerp(this.StartPos, this.Target, amount); if (this.GetParent <Unit>().UnitType == UnitType.Player) { Console.WriteLine(" MoveComponent-87-unitPos: " + unit.UnitType + " " + unit.Position.ToString()); } } }); while (true) { await timerComponent.WaitAsync(50, cancellationToken); ///20190728 把50改为150 又改回为50 long timeNow = TimeHelper.Now(); if (timeNow - this.StartTime >= this.needTime) { unit.Position = this.Target; if (this.GetParent <Unit>().UnitType == UnitType.Player) { Console.WriteLine(" MoveComponent-104-unitPos: " + unit.UnitType + " " + unit.Position.ToString()); } break; } float amount = (timeNow - this.StartTime) * 1f / this.needTime; unit.Position = Vector3.Lerp(this.StartPos, this.Target, amount); } }
public void Start() { this.startTime = TimeHelper.Now(); }
public void Awake() { this.m_lastSimulationStepTime = TimeHelper.Now(); }
public async void Run() { await Task.Delay(1000); LoadTransferFromDB(); List <TransferHandle> transfersDel = new List <TransferHandle>(); var rule = Entity.Root.GetComponent <Rule>(); while (true) { await Task.Delay(15000 * 6); // Query success using (var dbSnapshot = Entity.Root.GetComponent <LevelDBStore>().GetSnapshot(0)) { transfersDel.Clear(); for (int ii = 0; ii < transfers.Count; ii++) { if (transfers[ii].sendCount <= 5) { string hasht = dbSnapshot.Get($"unique_{transfers[ii].unique}"); if (!string.IsNullOrEmpty(hasht)) { var transfer = dbSnapshot.Transfers.Get(hasht); if (transfer != null) { if (transfer.data == transfers[ii].unique) { transfers[ii].hash = hasht; transfersDel.Add(transfers[ii]); } } } } else { transfersDel.Add(transfers[ii]); } } using (DbSnapshot snapshot = Entity.Root.GetComponent <Pool>().PoolDBStore.GetSnapshot()) { bool remove = transfersDel.Count != 0; // Successfully deleted from table foreach (var it in transfersDel) { if (!string.IsNullOrEmpty(it.unique) && !string.IsNullOrEmpty(it.hash)) { snapshot.Add($"unique_{it.unique}", it.hash); // Add to transaction cross reference table } transfers.Remove(it); } if (remove) { snapshot.Commit(); } } // Start a new deal for (int ii = transfers.Count - 1; ii >= 0; ii--) { if (transfers[ii].lastHeight < rule.height + 6 && transfers[ii].sendCount <= 5) { transfers[ii].lastHeight = rule.height; transfers[ii].sendCount++; var account = dbSnapshot.Accounts.Get(transfers[ii].addressIn); BlockSub transfer = new BlockSub(); transfer.addressIn = transfers[ii].addressIn; transfer.addressOut = transfers[ii].addressOut; transfer.amount = transfers[ii].amount; transfer.type = "transfer"; transfer.nonce = ++account.nonce; transfer.timestamp = TimeHelper.Now(); transfer.data = transfers[ii].unique; transfer.hash = transfer.ToHash(); transfer.sign = transfer.ToSign(Wallet.GetWallet().GetCurWallet()); dbSnapshot.Accounts.Add(transfers[ii].addressIn, account); // account.nonce Count accumulation int rel = Entity.Root.GetComponent <Rule>().AddTransfer(transfer); if (rel != 1) { Log.Error($"TransferProcess: aAddTransfer Error! {transfers[ii]}"); transfers.RemoveAt(ii); } } } } } }