// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using Microsoft.Extensions.Logging; namespace Libuv.Internal { /// /// Summary description for UvWriteRequest /// public class UvConnectRequest : UvRequest { private static readonly LibuvFunctions.uv_connect_cb _uv_connect_cb = UvConnectCb; private Action _callback; private object _state; public UvConnectRequest(ILibuvTrace logger) : base (logger) { } public override void Init(LibuvThread thread) { DangerousInit(thread.Loop); base.Init(thread); } public void DangerousInit(UvLoopHandle loop) { var requestSize = loop.Libuv.req_size(LibuvFunctions.RequestType.CONNECT); CreateMemory( loop.Libuv, loop.ThreadId, requestSize); } public void Connect( UvPipeHandle pipe, string name, Action callback, object state) { _callback = callback; _state = state; Libuv.pipe_connect(this, pipe, name, _uv_connect_cb); } private static void UvConnectCb(IntPtr ptr, int status) { var req = FromIntPtr(ptr); var callback = req._callback; req._callback = null; var state = req._state; req._state = null; UvException error = null; if (status < 0) req.Libuv.Check(status, out error); try { callback(req, status, error, state); } catch (Exception ex) { req._log.LogError(0, ex, "UvConnectRequest"); throw; } } } }