Exemple #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)));
        }
Exemple #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)));
        }
Exemple #3
0
        public static NngResult <INngStreamListener> Alloc(string addr)
        {
            var listener = nng_stream_listener.Null;
            var res      = nng_stream_listener_alloc(ref listener, addr);

            return(NngResult <INngStreamListener> .OkThen(res, () => new StreamListener()
            {
                listener = listener
            }));
        }
Exemple #4
0
        public static NngResult <INngStreamDialer> Alloc(string addr)
        {
            var dialer = nng_stream_dialer.Null;
            var res    = nng_stream_dialer_alloc(ref dialer, addr);

            return(NngResult <INngStreamDialer> .OkThen(res, () => new StreamDialer()
            {
                dialer = dialer
            }));
        }
Exemple #5
0
        public static NngResult <INngAio> Create(AioCallback callback)
        {
            // Make a copy to ensure an automatically created delegate doesn't get GC'd while native code
            // is still using it:
            // https://stackoverflow.com/questions/6193711/call-has-been-made-on-garbage-collected-delegate-in-c
            // https://docs.microsoft.com/en-us/cpp/dotnet/how-to-marshal-callbacks-and-delegates-by-using-cpp-interop
            var res = nng_aio_alloc(out var aioHandle, callback, IntPtr.Zero);

            return(NngResult <INngAio> .OkThen(res, () => new NngAio { aioHandle = aioHandle, gcHandle = GCHandle.Alloc(callback) }));
        }
Exemple #6
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);
            }));
        }
Exemple #7
0
        /// <summary>
        /// Create a subscribe socket
        /// </summary>
        /// <returns>The open.</returns>
        public static NngResult <ISubSocket> Open()
        {
            var res = nng_sub0_open(out var socket);

            return(NngResult <ISubSocket> .OkThen(res, () => new SubSocket { NativeNngStruct = socket }));
        }
Exemple #8
0
        public static NngResult <IStatRoot> GetStatSnapshot()
        {
            var res = nng_stats_get(out nng_stat statsp);

            return(NngResult <IStatRoot> .OkThen(res, () => new StatRoot { NngStat = statsp }));
        }
Exemple #9
0
        public NngResult <INngMsg> Dup()
        {
            var res = nng_msg_dup(out var msg, NativeNngStruct);

            return(NngResult <INngMsg> .OkThen(res, () => new NngMsg(msg)));
        }
Exemple #10
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)));
        }
Exemple #11
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)));
        }
Exemple #12
0
        /// <summary>
        /// Create a publish socket
        /// </summary>
        /// <returns>The open.</returns>
        public static NngResult <IPubSocket> Open()
        {
            int res = nng_pub0_open(out var socket);

            return(NngResult <IPubSocket> .OkThen(res, () => new PubSocket { NngSocket = socket }));
        }
Exemple #13
0
        /// <summary>
        /// Create a reply socket
        /// </summary>
        /// <returns>The open.</returns>
        public static NngResult <IRepSocket> Open()
        {
            var res = nng_rep0_open(out var socket);

            return(NngResult <IRepSocket> .OkThen(res, () => new RepSocket { NngSocket = socket }));
        }