상속: UvHandle
 public KestrelThread(KestrelEngine engine)
 {
     _engine = engine;
     _loop = new UvLoopHandle();
     _post = new UvAsyncHandle();
     _thread = new Thread(ThreadStart);
     QueueCloseHandle = PostCloseHandle;
 }
예제 #2
0
        unsafe public MockLibuv()
        {
            _uv_write = UvWrite;

            _uv_async_send = postHandle =>
            {
                _loopWh.Set();

                return 0;
            };

            _uv_async_init = (loop, postHandle, callback) =>
            {
                _postHandle = postHandle;
                _onPost = callback;

                return 0;
            };

            _uv_run = (loopHandle, mode) =>
            {
                while (!_stopLoop)
                {
                    _loopWh.Wait();
                    _loopWh.Reset();
                    _onPost(_postHandle.InternalGetHandle());
                }

                return 0;
            };

            _uv_ref = handle => { };
            _uv_unref = handle =>
            {
                _stopLoop = true;
                _loopWh.Set();
            };

            _uv_stop = handle =>
            {
                _stopLoop = true;
                _loopWh.Set();
            };

            _uv_req_size = reqType => IntPtr.Size;
            _uv_loop_size = () => IntPtr.Size;
            _uv_handle_size = handleType => IntPtr.Size;
            _uv_loop_init = loop => 0;
            _uv_tcp_init = (loopHandle, tcpHandle) => 0;
            _uv_close = (handle, callback) => callback(handle);
            _uv_loop_close = handle => 0;
            _uv_walk = (loop, callback, ignore) => 0;
        }
예제 #3
0
 public KestrelThread(KestrelEngine engine)
 {
     _engine = engine;
     _appLifetime = engine.AppLifetime;
     _log = engine.Log;
     _threadPool = engine.ThreadPool;
     _loop = new UvLoopHandle(_log);
     _post = new UvAsyncHandle(_log);
     _thread = new Thread(ThreadStart);
     _thread.Name = "KestrelThread - libuv";
     QueueCloseHandle = PostCloseHandle;
 }
예제 #4
0
 public async Task AsyncCanBeSent()
 {
     var loop = new UvLoopHandle();
     loop.Init(_uv);
     var trigger = new UvAsyncHandle();
     var called = false;
     trigger.Init(loop, () =>
     {
         called = true;
         trigger.Dispose();
     });
     trigger.Send();
     loop.Run();
     loop.Dispose();
     Assert.True(called);
 }
예제 #5
0
 public void async_send(UvAsyncHandle handle)
 {
     Check(_uv_async_send(handle));
 }
예제 #6
0
 public void async_init(UvLoopHandle loop, UvAsyncHandle handle, uv_async_cb cb)
 {
     loop.Validate();
     handle.Validate();
     Check(_uv_async_init(loop, handle, cb));
 }
예제 #7
0
 public extern static int uv_async_send(UvAsyncHandle handle);
예제 #8
0
 public static extern int uv_async_init(UvLoopHandle loop,UvAsyncHandle handle,uv_async_cb cb);
예제 #9
0
 public void async_send(UvAsyncHandle handle)
 {
     Check(_uv_async_send(handle));
 }
예제 #10
0
 public void async_init(UvLoopHandle loop, UvAsyncHandle handle, uv_async_cb cb)
 {
     loop.Validate();
     handle.Validate();
     Check(_uv_async_init(loop, handle, cb));
 }
예제 #11
0
 public extern static int uv_async_send(UvAsyncHandle handle);
예제 #12
0
 public static extern int uv_async_init(UvLoopHandle loop, UvAsyncHandle handle, uv_async_cb cb);