// 启动服务器 public void StartServer(string ip, int port) { AddHandler("chat", OnChat); server = new TCPPeer(this); server.Listen(ip, port); // 启动另一个线程处理消息队列 this.StartThreadUpdate(); Console.WriteLine("启动聊天服务器"); }
public void StartServer(string ip, int port) { AddHandler("chat", OnChat); server = new TCPPeer(this); server.Listen(ip, port); //start the independent myThread to handle message queue this.StartThreadUpdate(); Console.WriteLine("starting chat server"); }
// Use this for initialization public void Start() { // 连接服务器 client = new TCPPeer(this); client.Connect("127.0.0.1", 10001); }
private void SenderSpawn(int ID, PhantasmaKeys masterKeys, string nexusName, string host, BigInteger initialAmount, int addressesListSize) { Throw.IfNull(logger, nameof(logger)); Thread.CurrentThread.IsBackground = true; BigInteger fee = 9999; // TODO calculate the real fee BigInteger amount = initialAmount; var tcp = new TcpClient("localhost", 7073); var peer = new TCPPeer(tcp.Client); var peerKey = PhantasmaKeys.Generate(); logger.Message($"#{ID}: Connecting to peer: {host} with address {peerKey.Address.Text}"); var request = new RequestMessage(RequestKind.None, nexusName, peerKey.Address); request.Sign(peerKey); peer.Send(request); int batchCount = 0; var rpc = new JSONRPC_Client(); { logger.Message($"#{ID}: Sending funds to address {peerKey.Address.Text}"); var hash = SendTransfer(rpc, logger, nexusName, host, masterKeys, peerKey.Address, initialAmount); if (hash == Hash.Null) { logger.Error($"#{ID}:Stopping, fund transfer failed"); return; } if (!ConfirmTransaction(rpc, logger, host, hash)) { logger.Error($"#{ID}:Stopping, fund confirmation failed"); return; } } logger.Message($"#{ID}: Beginning send mode"); bool returnPhase = false; var txs = new List <Transaction>(); var addressList = new List <PhantasmaKeys>(); int waveCount = 0; while (true) { bool shouldConfirm; try { txs.Clear(); if (returnPhase) { foreach (var target in addressList) { var script = ScriptUtils.BeginScript().AllowGas(target.Address, Address.Null, 1, 9999).TransferTokens("SOUL", target.Address, peerKey.Address, 1).SpendGas(target.Address).EndScript(); var tx = new Transaction(nexusName, "main", script, Timestamp.Now + TimeSpan.FromMinutes(30)); tx.Sign(target); txs.Add(tx); } addressList.Clear(); returnPhase = false; waveCount = 0; shouldConfirm = true; } else { amount -= fee * 2 * addressesListSize; if (amount <= 0) { break; } for (int j = 0; j < addressesListSize; j++) { var target = PhantasmaKeys.Generate(); addressList.Add(target); var script = ScriptUtils.BeginScript().AllowGas(peerKey.Address, Address.Null, 1, 9999).TransferTokens("SOUL", peerKey.Address, target.Address, 1 + fee).SpendGas(peerKey.Address).EndScript(); var tx = new Transaction(nexusName, "main", script, Timestamp.Now + TimeSpan.FromMinutes(30)); tx.Sign(peerKey); txs.Add(tx); } waveCount++; if (waveCount > 10) { returnPhase = true; shouldConfirm = true; } else { shouldConfirm = false; } } returnPhase = !returnPhase; var msg = new MempoolAddMessage(peerKey.Address, txs); msg.Sign(peerKey); peer.Send(msg); } catch (Exception e) { logger.Error($"#{ID}:Fatal error : {e}"); return; } if (txs.Any()) { if (shouldConfirm) { var confirmation = ConfirmTransaction(rpc, logger, host, txs.Last().Hash); if (!confirmation) { logger.Error($"#{ID}:Confirmation failed, aborting..."); } } else { Thread.Sleep(500); } batchCount++; logger.Message($"#{ID}:Sent {txs.Count} transactions (batch #{batchCount})"); } else { logger.Message($"#{ID}: No transactions left"); return; } } logger.Message($"#{ID}: Thread ran out of funds"); }
public void StartServer(string ip, int port) { // 注册事件,本例中只有一个聊天消息 server = new TCPPeer(this); server.Listen(ip, port); }
//发送数据包 public void SendMessage(Packet packet) { TCPPeer.Send(socket, packet); }
//连接服务器 public void ConnectToServer() { peer = new TCPPeer(this); socket = peer.Connect("127.0.0.1", 8000); }