Ejemplo n.º 1
0
        private async ValueTask OpenSocket(CancellationToken cancellationToken = default)
        {
            if (socket is object)
            {
                return;
            }
            using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
            await socketSemaphore.WaitAsync(-1, cts.Token);

            try {
                while (socket is null && !cts.Token.IsCancellationRequested)
                {
                    try {
                        socket = factory.RequesterOpen().ThenDial(uri).Unwrap();
                        socketConfigurator?.Invoke(socket);
                    }catch (NngException exception) {
                        if (exception.ErrorCode == nng.Native.Defines.NNG_ECONNREFUSED)
                        {
                            await Task.Delay(100, cts.Token);
                        }
                        else
                        {
                            throw;
                        }
                    }
                }
            }
            finally
            {
                socketSemaphore.Release();
            }
        }
Ejemplo n.º 2
0
        public string Get(string id)
        {
            IReqSocket client = _factory.Create();

            try
            {
                return(client.SendRequest(id));
            }
            finally
            {
                _factory.Release(client);
            }
        }
Ejemplo n.º 3
0
        private void RequestThread(object clientFactory)
        {
            IReqSocket client = null;

            try
            {
                client = ((ClientFactory)clientFactory).Create();

                Console.WriteLine("Client connected.");
                string response = client.SendRequest(string.Format("Request #{0}", Thread.CurrentThread.ManagedThreadId));
                Console.WriteLine(response);
                Assert.AreEqual(string.Format("Reply (Request #{0})", Thread.CurrentThread.ManagedThreadId), response);
            }
            finally
            {
                if (client != null)
                {
                    ((ClientFactory)clientFactory).Release(client);
                }
            }
        }
Ejemplo n.º 4
0
 public static NngResult <IReqRepAsyncContext <T> > CreateAsyncContext <T>(this IReqSocket socket, IAPIFactory <T> factory) => factory.CreateReqRepAsyncContext(socket);
Ejemplo n.º 5
0
 public void Release(IReqSocket instance)
 {
     ((ReqSocket)instance).Dispose();
 }
Ejemplo n.º 6
0
        public static NngResult <IReqRepAsyncContext <T> > Create(IMessageFactory <T> factory, IReqSocket socket)
        {
            var context = new ReqAsyncCtx <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 <IReqRepAsyncContext <T> > .Ok(context));
                }
                return(NngResult <IReqRepAsyncContext <T> > .Err(ctx.Err()));
            }
            else
            {
                return(NngResult <IReqRepAsyncContext <T> > .Fail(res.Err()));
            }
        }
Ejemplo n.º 7
0
 public NngResult <IReqRepAsyncContext <INngMsg> > CreateReqRepAsyncContext(IReqSocket socket)
 {
     return(ReqAsyncCtx <INngMsg> .Create(this, socket));
 }