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())); } }
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)); } }
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)); }
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())); } }
/// <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())); }
public static NngResult <Unit> Err(NngErrno err) => NngResult <Unit> .Err(err);