private void HandleAsyncCallback(IAsyncResult ar) { if (ar.IsCompleted == false) { return; } TcpListener listener = (TcpListener)ar.AsyncState; var client = listener.EndAcceptTcpClient(ar); Console.WriteLine("TcpClient connected from " + client.Client.RemoteEndPoint); var wr_client = new WrappedTcpClient(client); wr_client.OnDidReadBytes += (theClient, data) => { OnDidReadBytes?.Invoke(theClient, data); }; lock (lockObj) { clients.Add(wr_client); } wr_client.Start(); tcpListener.BeginAcceptTcpClient(HandleAsyncCallback, tcpListener); }
public void Write(byte[] data, bool asTextFrames = false) { lock (lockObj) { List <WrappedTcpClient> clientsToRemove = new List <WrappedTcpClient>(); for (int i = 0; i < clients.Count; i++) { WrappedTcpClient client = clients[i]; if (client.IsConnected == false) { clientsToRemove.Add(client); continue; } Console.WriteLine("Writing " + data.Length + " bytes"); client.Write(data); } foreach (var cli in clientsToRemove) { Console.WriteLine("Removing client ... no longer connected"); clients.Remove(cli); } } }
static void TcpServer_OnDidReadBytes(WrappedTcpClient client, ReadOnlySpan <byte> data) { webSocketServer?.Write(data.ToArray()); }