Пример #1
0
        public static NngResult <IRepReqAsyncContext <T> > Create(IMessageFactory <T> factory, IRepSocket socket)
        {
            var context = new RepAsyncCtx <T> {
                Factory = factory, socket = socket
            };
            var res = context.InitAio();

            if (res.IsOk())
            {
                //TODO: when get default interface methods in C#8 move this to ICtx
                var ctx = NngCtx.Create(socket);
                if (ctx.IsOk())
                {
                    context.Ctx = ctx.Ok();
                    // Start receive loop
                    context.AioCallback(IntPtr.Zero);
                    return(NngResult <IRepReqAsyncContext <T> > .Ok(context));
                }
                return(NngResult <IRepReqAsyncContext <T> > .Err(ctx.Err()));
            }
            else
            {
                return(NngResult <IRepReqAsyncContext <T> > .Fail(res.Err()));
            }
        }
Пример #2
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));
     }
 }
Пример #3
0
        public static NngResult <IReqRepAsyncContext <T> > Create(IMessageFactory <T> factory, ISocket socket)
        {
            var context = new ReqAsyncCtx <T> {
                Factory = factory, Socket = socket
            };
            var res = context.InitAio();

            if (res == 0)
            {
                //TODO: when get default interface methods in C#8 move this to ICtx
                var ctx = AsyncCtx.Create(socket);
                if (ctx.IsOk())
                {
                    context.Ctx = ctx.Ok();
                    return(NngResult <IReqRepAsyncContext <T> > .Ok(context));
                }
                return(NngResult <IReqRepAsyncContext <T> > .Err(ctx.Err()));
            }
            return(NngResult <IReqRepAsyncContext <T> > .Fail(res));
        }
Пример #4
0
        public static NngResult <ISurveyorAsyncContext <T> > Create(IMessageFactory <T> factory, ISendRecvSocket socket)
        {
            var context = new SurveyAsyncContext <T> {
                Factory = factory, socket = socket
            };
            var res = context.InitAio();

            if (res.IsOk())
            {
                //TODO: when get default interface methods in C#8 move this to ICtx
                var ctx = NngCtx.Create(socket);
                if (ctx.IsOk())
                {
                    context.Ctx = ctx.Ok();
                    return(NngResult <ISurveyorAsyncContext <T> > .Ok(context));
                }
                return(NngResult <ISurveyorAsyncContext <T> > .Err(ctx.Err()));
            }
            else
            {
                return(NngResult <ISurveyorAsyncContext <T> > .Fail(res.Err()));
            }
        }
Пример #5
0
 /// <summary>
 /// Create a fail result from the fail value.  If this is a success result throws an exception.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <returns></returns>
 public NngResult <T> IntoErr <T>()
 {
     return(NngResult <T> .Err(Err()));
 }
Пример #6
0
 public static NngResult <Unit> Err(NngErrno err) => NngResult <Unit> .Err(err);