static async Task nb_socket_tcp_proc(Socket s) { using (NonBlockSocket b = new NonBlockSocket(new PalSocket(s))) { while (b.IsDisconnected == false) { byte[] data = null; lock (b.RecvTcpFifo) { data = b.RecvTcpFifo.Read(); } if (data.Length >= 1) { string str = Encoding.UTF8.GetString(data); Console.Write(str); lock (b.SendTcpFifo) { b.SendTcpFifo.Write(data); } b.EventSendNow.Set(); } else { await b.EventRecvReady.WaitOneAsync(out _); } } Dbg.Where("Disconnected."); } }
static async Task nb_socket_udp_proc() { UdpClient uc = new UdpClient(AddressFamily.InterNetwork); uc.Client.Bind(new IPEndPoint(IPAddress.Any, 0)); Console.WriteLine($"port: {((IPEndPoint)uc.Client.LocalEndPoint).Port}"); IPAddress server_ip = IPAddress.Parse("130.158.6.60"); using (NonBlockSocket b = new NonBlockSocket(new PalSocket(uc.Client))) { long next_send = 0; while (b.IsDisconnected == false) { long now = Time.Tick64; if (next_send == 0 || next_send <= now) { next_send = now + 500; lock (b.SendUdpQueue) { b.SendUdpQueue.Enqueue(new Datagram(new byte[] { (byte)'B' }, new IPEndPoint(server_ip, 5004))); } b.EventSendNow.Set(); } lock (b.RecvUdpQueue) { while (b.RecvUdpQueue.Count >= 1) { Datagram pkt = b.RecvUdpQueue.Dequeue(); Dbg.Where($"recv: {pkt.Data.Length} {pkt.IPEndPoint}"); string tmp = Encoding.ASCII.GetString(pkt.Data.Span); var ep = UdpAccel.ParseIPAndPortStr(tmp); Console.WriteLine(ep); } } await WebSocketHelper.WaitObjectsAsync( cancels : new CancellationToken[] { b.CancelToken }, events : new AsyncAutoResetEvent[] { b.EventRecvReady, b.EventSendReady }, timeout : (int)(next_send - now)); Dbg.Where(); } Dbg.Where("Disconnected."); } }