protected override void OnReceived(EndPoint endpoint, byte[] buffer, long offset, long size) { // Continue receive datagrams. if (size == 0) { // Important: Receive using thread pool is necessary here to avoid stack overflow with Socket.ReceiveFromAsync() method! ThreadPool.QueueUserWorkItem(o => { ReceiveAsync(); }); } if (size > 0) { if (!Session.TryGetValue(endpoint, out Kcp kcp)) { kcp = Kcp.Create(userData: endpoint); kcp.SetOutput(KcpSend); Session.Add(endpoint, kcp); } kcp.Input(buffer); // Echo the message back to the sender kcp.Send(buffer.AsSpan().Slice((int)offset, (int)size)); } }
public KcpTestClient(string address, int port, int messages) : base(address, port) { _messages = messages; kcp = Kcp.Create(); kcp.SetOutput(KcpOutput); }