public void ParseEnv() { var byteBuffer = BytePool.Intance.Get(_readBufferSize); Marshal.Copy(_readBuffer, byteBuffer.Array, byteBuffer.Offset, _readBufferSize); Pointers.Free(_readBuffer); ByteRequestParser.Parse(byteBuffer, Env); }
public void CanCreateTcpServer() { var loop = Lib.uv_default_loop(); var server = Pointers.Alloc(Lib.uv_handle_size(HandleType.UV_TCP)); int error = -1; Assert.DoesNotThrow(() => error = Lib.uv_tcp_init(loop, server)); Assert.Equal(0, error); Pointers.Free(server); }
public unsafe void SimpleHttpResponse() { IntPtr server; IntPtr client = IntPtr.Zero; string received = null; int listenStatus = 0; var cts = new CancellationTokenSource(); var loop = Lib.uv_loop_new(); server = Pointers.Alloc(Lib.uv_handle_size(HandleType.UV_TCP)); Assert.Equal(0, Lib.uv_tcp_init(loop, server)); var sockaddr = Lib.uv_ip4_addr(IPAddress.Loopback.ToString(), Port); Assert.Equal(0, Lib.uv_tcp_bind(server, sockaddr)); Assert.Equal(0, Lib.uv_listen(server, 128, (srv, status) => { if (status < 0) { listenStatus = status; return; } var http = new Http(loop, server, HttpCallback, null); http.Run(); })); var runTask = Task.Run(() => Lib.uv_run(loop, uv_run_mode.UV_RUN_DEFAULT), cts.Token); SendHttpRequest(); SpinWait.SpinUntil(() => _stopped, 1000); Lib.uv_stop(loop); cts.Cancel(); Pointers.Free(server); Trace.WriteLine("Result: " + _result); Assert.Equal(Body, _result); }
public unsafe void SimpleHttpResponse() { IntPtr server; IntPtr client = IntPtr.Zero; string received = null; bool stopped = false; int listenStatus = 0; var cts = new CancellationTokenSource(); var loop = Lib.uv_loop_new(); server = Pointers.Alloc(Lib.uv_handle_size(HandleType.UV_TCP)); Assert.Equal(0, Lib.uv_tcp_init(loop, server)); var sockaddr = Lib.uv_ip4_addr(IPAddress.Loopback.ToString(), Port); Assert.Equal(0, Lib.uv_tcp_bind(server, sockaddr)); Assert.Equal(0, Lib.uv_listen(server, 128, (srv, status) => { if (status < 0) { listenStatus = status; return; } client = Pointers.Alloc(Lib.uv_handle_size(HandleType.UV_TCP)); int error = Lib.uv_tcp_init(loop, client); error = Lib.uv_accept(server, client); if (error == 0) { Lib.uv_read_start_win(client, AllocBuffer, (stream, size, buffer) => { received = Marshal.PtrToStringAnsi(buffer.@base, size); Pointers.Free(buffer.@base); string response = CreateResponse(); var responsePtr = Marshal.StringToHGlobalAnsi(response); var buf = Lib.uv_buf_init(responsePtr, (uint)response.Length + 1); var bufs = new[] { buf }; var writeRequest = Pointers.Alloc(Lib.uv_req_size(RequestType.UV_WRITE)); Lib.uv_write_win(writeRequest, client, bufs, 1, (req, i) => { Lib.uv_close(client, null); Lib.uv_stop(loop); stopped = true; }); }); } else { Lib.uv_close(client, null); Lib.uv_stop(loop); stopped = true; } })); var runTask = Task.Run(() => Lib.uv_run(loop, uv_run_mode.UV_RUN_DEFAULT), cts.Token); SendHttpRequest(); SpinWait.SpinUntil(() => stopped, 1000); if (!stopped) { Lib.uv_stop(loop); } cts.Cancel(); Pointers.Free(client); Pointers.Free(server); Trace.WriteLine("Result: " + _result); Assert.Equal(Body, _result); }
public void TcpServerCanListen() { IntPtr server; IntPtr client = IntPtr.Zero; string received = null; bool stopped = false; int listenStatus = 0; var cts = new CancellationTokenSource(); var loop = Lib.uv_loop_new(); server = Pointers.Alloc(Lib.uv_handle_size(HandleType.UV_TCP)); Assert.Equal(0, Lib.uv_tcp_init(loop, server)); var sockaddr = Lib.uv_ip4_addr(IPAddress.Loopback.ToString(), Port); Assert.Equal(0, Lib.uv_tcp_bind(server, sockaddr)); Assert.Equal(0, Lib.uv_listen(server, 128, (srv, status) => { if (status < 0) { listenStatus = status; return; } client = Pointers.Alloc(Lib.uv_handle_size(HandleType.UV_TCP)); int error = Lib.uv_tcp_init(loop, client); error = Lib.uv_accept(server, client); if (error == 0) { Lib.uv_read_start_win(client, AllocBuffer, (stream, size, buffer) => { received = Marshal.PtrToStringAnsi(buffer.@base, size); Pointers.Free(buffer.@base); Lib.uv_close(client, null); Lib.uv_stop(loop); stopped = true; }); } else { Lib.uv_close(client, null); Lib.uv_stop(loop); stopped = true; } })); var runTask = Task.Run(() => Lib.uv_run(loop, uv_run_mode.UV_RUN_DEFAULT), cts.Token); SendString("Hello."); SpinWait.SpinUntil(() => stopped, 1000); if (!stopped) { Lib.uv_stop(loop); } cts.Cancel(); Pointers.Free(client); Pointers.Free(server); Assert.Equal("Hello.", received); }