void INetworkUser.SendPacket(IPacket packet, IPEndPoint endPoint) { Server.SendUnconnectedMessage(packet.CreateMessage(Server), endPoint); }
private void btnSend_Click(object sender, EventArgs e) { var str = txtSend.Text; if (String.IsNullOrEmpty(str)) { MessageBox.Show("发送内容不能为空!", Text); txtSend.Focus(); return; } // 多次发送 var count = (Int32)numMutilSend.Value; var sleep = (Int32)numSleep.Value; var ths = (Int32)numThreads.Value; if (count <= 0) { count = 1; } if (sleep <= 0) { sleep = 1; } SaveConfig(); var cfg = MessageConfig.Current; // 处理换行 str = str.Replace("\n", "\r\n"); var buf = cfg.HexSend ? str.ToHex() : str.GetBytes(); // 构造消息 var msg = _Packet.CreateMessage(buf); buf = msg.ToArray(); if (_Client != null) { if (ths <= 1) { _Client.SendMulti(buf, count, sleep); } else { Parallel.For(0, ths, n => { var client = _Client.Remote.CreateRemote(); client.StatSend = _Client.StatSend; client.StatReceive = _Client.StatReceive; client.SendMulti(buf, count, sleep); }); } } else if (_Server != null) { Task.Run(async() => { for (int i = 0; i < count; i++) { var cs = await _Server.SendAllAsync(buf); XTrace.WriteLine("已向[{0}]个客户端发送[{1}]数据", cs, buf.Length); if (sleep > 0) { await Task.Delay(sleep); } } }); } }
/// <summary> /// Sends an <see cref="IPacket"/> to a client using the specified <see cref="IPacket.DeliveryMethod"/> /// </summary> /// <param name="packet">The <see cref="IPacket"/> to send</param> /// <param name="connection">The client's <see cref="NetConnection"/></param> public void SendPacket(IPacket packet, NetConnection connection) { connection.SendMessage(packet.CreateMessage(Server), Network.DeliveryMethod, Network.DefaultChannel); }