示例#1
0
        public NngResult <IMessage> RecvMsg(Defines.NngFlag flags = default)
        {
            nng_msg message;
            var     res = nng_recvmsg(NngSocket, out message, flags);

            return(NngResult <IMessage> .OkThen(res, () => new Message(message)));
        }
示例#2
0
        public NngResult <INngMsg> RecvMsg(Defines.NngFlag flags = default)
        {
            nng_msg message;
            var     res = nng_recvmsg(NativeNngStruct, out message, flags);

            return(NngResult <INngMsg> .OkThen(res, () => new NngMsg(message)));
        }
示例#3
0
        public NngResult <Unit> SendZeroCopy(IMemory message, Defines.NngFlag flags = default)
        {
            // Unconditionally set NNG_FLAG_ALLOC for "zero-copy" send
            flags = flags | Defines.NngFlag.NNG_FLAG_ALLOC;
            var res = nng_send(NngSocket, message.Ptr, message.Length, flags);

            return(Unit.OkIfZero(res));
        }
示例#4
0
        public NngResult <Unit> SendMsg(IMessage message, Defines.NngFlag flags = default)
        {
            var res = Unit.OkIfZero(nng_sendmsg(NngSocket, message.NngMsg, flags));

            if (res.IsOk())
            {
                // If call succeeds, nng takes ownership of message.
                var _ = message.Take();
            }
            return(res);
        }
示例#5
0
        public NngResult <Unit> Send(ReadOnlySpan <byte> message, Defines.NngFlag flags = default)
        {
            unsafe
            {
                fixed(byte *ptr = &message[0])
                {
                    var res = nng_send(NngSocket, (IntPtr)ptr, (UIntPtr)message.Length, flags);

                    return(Unit.OkIfZero(res));
                }
            }
        }
示例#6
0
        public NngResult <Unit> SendZeroCopy(IMemory message, Defines.NngFlag flags = default)
        {
            // Unconditionally set NNG_FLAG_ALLOC for "zero-copy" send
            flags = flags | Defines.NngFlag.NNG_FLAG_ALLOC;
            var res = Unit.OkIfZero(nng_send(NngSocket, message.Ptr, message.Length, flags));

            if (res.IsOk())
            {
                // If call succeeds, nng takes ownership of message.
                message.Take();
            }
            return(res);
        }
示例#7
0
        public NngResult <IMemory> RecvZeroCopy(Defines.NngFlag flags = default)
        {
            // Unconditionally set NNG_FLAG_ALLOC for "zero-copy" receive
            flags = flags | Defines.NngFlag.NNG_FLAG_ALLOC;
            var ptr  = IntPtr.Zero;
            var size = UIntPtr.Zero;
            var res  = nng_recv(NngSocket, ref ptr, ref size, flags);

            return(NngResult <IMemory> .OkThen(res, () => {
                System.Diagnostics.Debug.Assert(ptr != default && size != default);
                return Alloc.Create(ptr, size);
            }));
        }
示例#8
0
 public NngResult <UIntPtr> Recv(ref IMemory buffer, Defines.NngFlag flags = default)
 {
     if (flags.HasFlag(Defines.NngFlag.NNG_FLAG_ALLOC))
     {
         var res = RecvZeroCopy(flags);
         return(res.Into <UIntPtr>(() => res.Ok().Length));
     }
     else
     {
         if (buffer == null || buffer.Length == UIntPtr.Zero)
         {
             return(NngResult <UIntPtr> .Err(Defines.NngErrno.EMSGSIZE));
         }
         var ptr  = buffer.Ptr;
         var size = buffer.Length;
         var res  = nng_recv(NngSocket, ref ptr, ref size, flags);
         return(NngResult <UIntPtr> .OkIfZero(res, size));
     }
 }
示例#9
0
 public static extern unsafe Int32 nng_send(nng_socket socket, IntPtr data, UIntPtr size, Defines.NngFlag flags);
示例#10
0
 public NngResult <Unit> SendMsg(IMessage message, Defines.NngFlag flags = default)
 {
     return(Unit.OkIfZero(nng_sendmsg(NngSocket, message.NngMsg, flags)));
 }
示例#11
0
 public static int nng_listen(nng_socket socket, string url, Defines.NngFlag flags)
 {
     return(nng_listen(socket, url, IntPtr.Zero, flags));
 }
示例#12
0
 public static extern int nng_listen(nng_socket socket, string url, out nng_listener listener, Defines.NngFlag flags);
示例#13
0
 public static extern Int32 nng_recvmsg(nng_socket socket, out nng_msg message, Defines.NngFlag flags);
示例#14
0
 public static extern int nng_dialer_start(nng_dialer dialer, Defines.NngFlag flags);
示例#15
0
 public static extern Int32 nng_recv(nng_socket socket, ref IntPtr data, ref UIntPtr size, Defines.NngFlag flags);
示例#16
0
 public static extern Int32 nng_sendmsg(nng_socket socket, nng_msg message, Defines.NngFlag flags);
示例#17
0
 public NngResult <Unit> Dial(string url, Defines.NngFlag flags = default)
 => Unit.OkIfZero(nng_dial(NngSocket, url, flags));
示例#18
0
 public static extern int nng_dial(nng_socket socket, string url, out nng_dialer dialer, Defines.NngFlag flags);
示例#19
0
 public NngResult <Unit> Listen(string url, Defines.NngFlag flags = default)
 => Unit.OkIfZero(nng_listen(NngSocket, url, flags));
示例#20
0
 static extern int nng_listen(nng_socket socket, string url, IntPtr not_used, Defines.NngFlag flags);
示例#21
0
        public NngResult <IListener> ListenWithListener(string url, Defines.NngFlag flags = default)
        {
            var res = nng_listen(NngSocket, url, out var listener, flags);

            return(NngResult <IListener> .OkThen(res, () => Listener.Create(listener)));
        }
示例#22
0
 public static extern int nng_listener_start(nng_listener listener, Defines.NngFlag flags);
示例#23
0
        public NngResult <IDialer> DialWithDialer(string url, Defines.NngFlag flags = default)
        {
            var res = nng_dial(NngSocket, url, out var dialer, flags);

            return(NngResult <IDialer> .OkThen(res, () => Dialer.Create(dialer)));
        }