예제 #1
0
 public static Span <byte> nng_msg_body_span(nng_msg message)
 {
     unsafe
     {
         return(new Span <byte>(nng_msg_body(message), (int)nng_msg_len(message)));
     }
 }
예제 #2
0
        internal void callback(IntPtr arg)
        {
            var res = 0;

            switch (State)
            {
            case AsyncState.Init:
                State = AsyncState.Recv;
                nng_recv_aio(Socket.NngSocket, aioHandle);
                break;

            case AsyncState.Recv:
                res = nng_aio_result(aioHandle);
                if (res != 0)
                {
                    State = AsyncState.Init;
                    asyncMessage.Source.Tcs.TrySetNngError(res);
                    return;
                }
                State = AsyncState.Init;
                nng_msg msg     = nng_aio_get_msg(aioHandle);
                var     message = Factory.CreateMessage(msg);
                asyncMessage.Source.Tcs.SetResult(message);
                break;

            default:
                asyncMessage.Source.Tcs.SetException(new Exception(State.ToString()));
                break;
            }
        }
예제 #3
0
        protected override void AioCallback(IntPtr argument)
        {
            var res = Unit.Ok;

            switch (State)
            {
            case AsyncState.Recv:
                res = Aio.GetResult();
                if (res.IsErr())
                {
                    State = AsyncState.Init;
                    tcs.TrySetNngError(res.Err());
                    return;
                }
                State = AsyncState.Init;
                nng_msg msg     = Aio.GetMsg();
                var     message = Factory.CreateMessage(msg);
                tcs.TrySetResult(NngResult <T> .Ok(message));
                break;

            case AsyncState.Init:
            default:
                tcs.TrySetException(new Exception(State.ToString()));
                break;
            }
        }
예제 #4
0
        protected override void AioCallback(IntPtr argument)
        {
            var res = 0;

            switch (State)
            {
            case AsyncState.Recv:
                res = nng_aio_result(aioHandle);
                if (res != 0)
                {
                    State = AsyncState.Init;
                    tcs.TrySetNngError(res);
                    return;
                }
                State = AsyncState.Init;
                nng_msg msg     = nng_aio_get_msg(aioHandle);
                var     message = Factory.CreateMessage(msg);
                tcs.TrySetResult(NngResult <T> .Ok(message));
                break;

            case AsyncState.Init:
            default:
                tcs.TrySetException(new Exception(State.ToString()));
                break;
            }
        }
예제 #5
0
 public static Int32 nng_msg_append(nng_msg message, ReadOnlySpan <byte> data)
 {
     unsafe
     {
         fixed(byte *ptr = &data[0])
         {
             return(nng_msg_append(message, ptr, (UIntPtr)data.Length));
         }
     }
 }
예제 #6
0
        internal void callback(IntPtr arg)
        {
            lock (sync)
            {
                var res = 0;
                switch (State)
                {
                case AsyncState.Init:
                    init();
                    break;

                case AsyncState.Recv:
                    res = nng_aio_result(aioHandle);
                    if (res != 0)
                    {
                        asyncMessage.requestTcs.TrySetNngError(res);
                        State = AsyncState.Recv;
                        return;
                    }
                    State = AsyncState.Wait;
                    nng_msg msg     = nng_aio_get_msg(aioHandle);
                    var     message = Factory.CreateMessage(msg);
                    asyncMessage.requestTcs.SetResult(message);
                    break;

                case AsyncState.Wait:
                    nng_aio_set_msg(aioHandle, Factory.Borrow(asyncMessage.response));
                    State = AsyncState.Send;
                    nng_ctx_send(ctxHandle, aioHandle);
                    break;

                case AsyncState.Send:
                    res = nng_aio_result(aioHandle);
                    if (res != 0)
                    {
                        Factory.Destroy(ref asyncMessage.response);
                        asyncMessage.replyTcs.TrySetNngError(res);
                    }
                    var currentReq = asyncMessage;
                    init();
                    currentReq.replyTcs.SetResult(true);
                    break;
                }
            }
        }
예제 #7
0
        protected override void AioCallback(IntPtr argument)
        {
            var res = 0;

            switch (State)
            {
            case AsyncState.Send:
                res = nng_aio_result(aioHandle);
                if (res != 0)
                {
                    HandleFailedSend();
                    State = AsyncState.Init;
                    sendTcs.TrySetNngError(res);
                    return;
                }
                State = AsyncState.Init;
                sendTcs.TrySetNngResult();
                break;

            case AsyncState.Recv:
                res = nng_aio_result(aioHandle);
                if (res != 0)
                {
                    State = AsyncState.Init;
                    receiveTcs.TrySetNngError(res);
                    return;
                }
                State = AsyncState.Init;
                nng_msg msg     = nng_aio_get_msg(aioHandle);
                var     message = Factory.CreateMessage(msg);
                receiveTcs.TrySetNngResult(message);
                break;

            case AsyncState.Init:
            default:
                Console.Error.WriteLine("Survey::AioCallback: " + State);
                State = AsyncState.Init;
                break;
            }
        }
예제 #8
0
        internal void callback(IntPtr arg)
        {
            var res = 0;

            switch (State)
            {
            case AsyncState.Init:
                break;

            case AsyncState.Send:
                res = nng_aio_result(aioHandle);
                if (res != 0)
                {
                    State = AsyncState.Init;
                    Factory.Destroy(ref sendMessage);
                    sendTcs.TrySetNngError(res);
                    return;
                }
                State = AsyncState.Init;
                sendTcs.SetResult(true);
                break;

            case AsyncState.Recv:
                res = nng_aio_result(aioHandle);
                if (res != 0)
                {
                    State = AsyncState.Init;
                    receiveTcs.Tcs.TrySetNngError(res);
                    return;
                }
                State = AsyncState.Init;
                nng_msg msg     = nng_aio_get_msg(aioHandle);
                var     message = Factory.CreateMessage(msg);
                receiveTcs.Tcs.SetResult(message);
                break;

            default:
                break;
            }
        }
예제 #9
0
        internal void callback(IntPtr arg)
        {
            var res = 0;

            switch (State)
            {
            case AsyncState.Init:
                State = AsyncState.Send;
                nng_aio_set_msg(aioHandle, Factory.Borrow(asyncMessage.message));
                nng_ctx_send(ctxHandle, aioHandle);
                break;

            case AsyncState.Send:
                res = nng_aio_result(aioHandle);
                if (res != 0)
                {
                    Factory.Destroy(ref asyncMessage.message);
                    asyncMessage.tcs.TrySetNngError(res);
                    State = AsyncState.Init;
                    return;
                }
                State = AsyncState.Recv;
                nng_ctx_recv(ctxHandle, aioHandle);
                break;

            case AsyncState.Recv:
                res = nng_aio_result(aioHandle);
                if (res != 0)
                {
                    asyncMessage.tcs.TrySetNngError(res);
                    State = AsyncState.Init;
                    return;
                }
                nng_msg msg     = nng_aio_get_msg(aioHandle);
                var     message = Factory.CreateMessage(msg);
                asyncMessage.tcs.SetResult(message);
                State = AsyncState.Init;
                break;
            }
        }
예제 #10
0
        protected override void AioCallback(IntPtr argument)
        {
            var res = Unit.Ok;

            switch (State)
            {
            case AsyncState.Init:
                init();
                break;

            case AsyncState.Recv:
                res = Aio.GetResult();
                if (res.IsErr())
                {
                    asyncMessage.requestTcs.TrySetNngError(res.Err());
                    State = AsyncState.Recv;
                    return;
                }
                State = AsyncState.Wait;
                nng_msg msg     = Aio.GetMsg();
                var     message = Factory.CreateMessage(msg);
                asyncMessage.requestTcs.SetNngResult(message);
                break;

            case AsyncState.Wait:
                break;

            case AsyncState.Send:
                res = Aio.GetResult();
                if (res.IsErr())
                {
                    HandleFailedSend();
                    asyncMessage.replyTcs.TrySetNngError(res.Err());
                }
                var currentReq = asyncMessage;
                init();
                currentReq.replyTcs.SetNngResult();
                break;
            }
        }
예제 #11
0
        protected override void AioCallback(IntPtr argument)
        {
            var res = Unit.Ok;

            switch (State)
            {
            case AsyncState.Send:
                res = Aio.GetResult();
                if (res.IsErr())
                {
                    HandleFailedSend();
                    State = AsyncState.Init;
                    sendTcs.TrySetNngError(res.Err());
                    return;
                }
                State = AsyncState.Init;
                sendTcs.TrySetNngResult();
                break;

            case AsyncState.Recv:
                res = Aio.GetResult();
                if (res.IsErr())
                {
                    State = AsyncState.Init;
                    receiveTcs.TrySetNngError(res.Err());
                    return;
                }
                State = AsyncState.Init;
                nng_msg msg     = Aio.GetMsg();
                var     message = Factory.CreateMessage(msg);
                receiveTcs.TrySetNngResult(message);
                break;

            case AsyncState.Init:
            default:
                Console.Error.WriteLine("SendReceive::AioCallback: " + State);
                State = AsyncState.Init;
                break;
            }
        }
예제 #12
0
 public NngMsg(nng_msg message)
 {
     this.message = message;
     _header      = new NngMsgHeader(message);
 }
예제 #13
0
 public static extern Int32 nng_msg_header_trim_u32(nng_msg message, out UInt32 data);
예제 #14
0
 public static extern Int32 nng_msg_header_insert_u32(nng_msg message, UInt32 data);
예제 #15
0
 public static extern Int32 nng_msg_header_append_u32(nng_msg message, UInt32 data);
예제 #16
0
 public static extern Int32 nng_msg_header_chop(nng_msg message, UIntPtr size);
예제 #17
0
 public static int nng_msg_alloc(out nng_msg message, uint size = 0)
 {
     return(nng_msg_alloc(out message, (UIntPtr)size));
 }
예제 #18
0
 public static extern Int32 nng_msg_trim(nng_msg message, UIntPtr size);
예제 #19
0
 public static extern unsafe Int32 nng_msg_header_append(nng_msg message, byte *data, UIntPtr size);
예제 #20
0
 public static extern nng_pipe nng_msg_get_pipe(nng_msg message);
예제 #21
0
 public static extern UIntPtr nng_msg_len(nng_msg message);
예제 #22
0
 public static extern unsafe void *nng_msg_header(nng_msg message);
예제 #23
0
 public static extern int nng_msg_realloc(ref nng_msg message, UIntPtr size);
예제 #24
0
 public static extern void nng_msg_free(nng_msg message);
예제 #25
0
 public NngMessageHeader(nng_msg message)
 {
     this.message = message;
 }
예제 #26
0
 static extern Int32 nng_msg_header_insert(nng_msg message, byte[] data, UIntPtr size);
예제 #27
0
 public Message(nng_msg message)
 {
     this.message = message;
     _header      = new NngMessageHeader(message);
 }
예제 #28
0
 public static Int32 nng_msg_header_insert(nng_msg message, byte[] data)
 {
     return(nng_msg_header_insert(message, data, (UIntPtr)data.Length));
 }
예제 #29
0
 public static extern unsafe void *nng_msg_body(nng_msg message);
예제 #30
0
 public static extern int nng_msg_alloc(out nng_msg message, UIntPtr size);