コード例 #1
0
        protected internal override unsafe StreamHandle NewStream()
        {
            IntPtr loopHandle = ((uv_stream_t *)InternalHandle)->loop;
            var    loop       = HandleContext.GetTarget <LoopContext>(loopHandle);

            var client = new Tcp(loop);

            NativeMethods.StreamAccept(InternalHandle, client.InternalHandle);
            client.ReadStart();

#if DEBUG
            if (Log.DebugEnabled)
            {
                Log.Debug("{} {} client {} accepted",
                          HandleType, InternalHandle, client.InternalHandle);
            }
#endif

            return(client);
        }
コード例 #2
0
        public static Tcp Bind(this Tcp tcp,
                               IPEndPoint localEndPoint,
                               Action <Tcp, IStreamReadCompletion> onRead,
                               bool dualStack = false)
        {
            if (tcp is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.tcp);
            }
            if (localEndPoint is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.localEndPoint);
            }
            if (onRead is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.onRead);
            }

            tcp.Bind(localEndPoint, dualStack);
            tcp.OnRead(onRead);

            return(tcp);
        }
コード例 #3
0
        protected internal override unsafe StreamHandle NewStream()
        {
            IntPtr         loopHandle = ((uv_stream_t *)InternalHandle)->loop;
            var            loop       = HandleContext.GetTarget <LoopContext>(loopHandle);
            uv_handle_type type       = ((uv_stream_t *)InternalHandle)->type;

            StreamHandle client;

            switch (type)
            {
            case uv_handle_type.UV_NAMED_PIPE:
                client = new Pipe(loop, _ipc);
                break;

            case uv_handle_type.UV_TCP:
                client = new Tcp(loop);
                break;

            default:
                throw ThrowHelper.GetInvalidOperationException_Pipe_IPC_handle_not_supported(type);
            }

            NativeMethods.StreamAccept(InternalHandle, client.InternalHandle);
            if (!_ipc)
            {
                client.ReadStart();
            }

#if DEBUG
            if (Log.DebugEnabled)
            {
                Log.Debug("{} {1} client {} accepted. (IPC : {})", HandleType, InternalHandle, client.InternalHandle, _ipc);
            }
#endif

            return(client);
        }
コード例 #4
0
        public static Tcp Listen(this Tcp tcp,
                                 IPEndPoint localEndPoint,
                                 Action <Tcp, Exception> onConnection,
                                 int backlog    = ServerStream.DefaultBacklog,
                                 bool dualStack = false)
        {
            if (tcp is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.tcp);
            }
            if (localEndPoint is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.localEndPoint);
            }
            if (onConnection is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.onConnection);
            }

            tcp.Bind(localEndPoint, dualStack);
            tcp.Listen(onConnection, backlog);

            return(tcp);
        }
コード例 #5
0
 public void QueueWriteStream(WritableBuffer writableBuffer, Tcp sendHandle, Action <Pipe, Exception> completion) =>
 base.QueueWriteStream(writableBuffer, sendHandle,
                       (streamHandle, exception) => completion((Pipe)streamHandle, exception));