internal static Task SendRequestChannel(this RSocket socket, int streamId, ReadOnlySequence <byte> data, ReadOnlySequence <byte> metadata = default, Int32 initialRequest = 0, bool follows = false, bool complete = false)
 {
     return(socket.OutputSync(output =>
     {
         return new RSocketProtocol.RequestChannel(streamId, data, metadata, initialRequest, follows, complete).WriteFlush(output, data, metadata);
     }));
 }
 internal static Task SendPayload(this RSocket socket, int streamId, ReadOnlySequence <byte> data = default, ReadOnlySequence <byte> metadata = default, bool follows = false, bool complete = false, bool next = false)
 {
     return(socket.OutputSync(output =>
     {
         return new RSocketProtocol.Payload(streamId, data, metadata, follows: follows, complete: complete, next: next).WriteFlush(output, data, metadata);
     }));
 }
 internal static Task SendSetup(this RSocket socket, TimeSpan keepalive, TimeSpan lifetime, string metadataMimeType = null, string dataMimeType = null, byte[] resumeToken = default, ReadOnlySequence <byte> data = default, ReadOnlySequence <byte> metadata = default)
 {
     return(socket.OutputSync(output =>
     {
         return new RSocketProtocol.Setup(keepalive, lifetime, metadataMimeType: metadataMimeType, dataMimeType: dataMimeType, resumeToken: resumeToken, data: data, metadata: metadata).WriteFlush(output, data: data, metadata: metadata);
     }));
 }
        public static async Task <string> RequestResponse(this RSocket socket, string data, string metadata = default)
        {
            var payload = await socket.RequestResponse(Helpers.StringToByteSequence(data), Helpers.StringToByteSequence(metadata));

            string str = Encoding.UTF8.GetString(payload.Data.ToArray());

            return(str);
        }
 internal static Task SendKeepAlive(this RSocket socket, int lastReceivedPosition, bool respond)
 {
     return(socket.OutputSync(output =>
     {
         RSocketProtocol.KeepAlive keepAlive = new RSocketProtocol.KeepAlive(lastReceivedPosition, respond);
         return keepAlive.WriteFlush(output);
     }));
 }
 internal static Task SendRequestN(this RSocket socket, int streamId, int n)
 {
     return(socket.OutputSync(output =>
     {
         var requestne = new RequestN(streamId, default(ReadOnlySequence <byte>), initialRequest: n);
         return requestne.WriteFlush(output);
     }));
 }
 internal static Task SendCancel(this RSocket socket, int streamId = 0)
 {
     return(socket.OutputSync(output =>
     {
         var cancel = new Cancel(streamId);
         return cancel.WriteFlush(output);
     }));
 }
        internal static Task SendError(this RSocket socket, int streamId, ErrorCodes errorCode, string errorText, bool throwIfExceptionOccurred = true)
        {
            var errorData = default(ReadOnlySequence <byte>);

            if (errorText != null)
            {
                errorData = new ReadOnlySequence <byte>(Encoding.UTF8.GetBytes(errorText));
            }
            return(SendError(socket, streamId, errorCode, errorData, throwIfExceptionOccurred));
        }
        internal static Task SendError(this RSocket socket, int streamId, ErrorCodes errorCode, ReadOnlySequence <byte> errorData, bool throwIfExceptionOccurred = true)
        {
            try
            {
                return(socket.OutputSync(output =>
                {
                    return new RSocketProtocol.Error(errorCode, streamId, errorData).WriteFlush(output, errorData);
                }));
            }
            catch
            {
                if (throwIfExceptionOccurred)
                {
                    throw;
                }

                return(Task.CompletedTask);
            }
        }
        internal static async Task OutputSync(this RSocket socket, Func <System.IO.Pipelines.PipeWriter, Task> func)
        {
            //lock (socket.Transport.Output)
            //{
            //	func(socket.Transport.Output).Wait(); //There is a deadlock hazard here.
            //	return;
            //}

            await socket.OutputSyncLock.WaitAsync();

            try
            {
                /* ps: PipeWriter is not a thread-safe object. */
                await func(socket.Transport.Output);
            }
            finally
            {
                socket.OutputSyncLock.Release();
            }
        }
示例#11
0
 public EchoServiceServer(RSocket.RSocket socket)
 {
     RSocketService.Register(socket, this);
 }
 public RequestResponseRequesterIncomingStream(RSocket socket, Func <int, Task> channelEstablisher) : base(socket, channelEstablisher)
 {
 }
 public RequestFireAndForgetRequesterIncomingStream(RSocket socket, Func <int, Task> channelEstablisher) : base(socket, channelEstablisher)
 {
 }
 public OutputPublisher(RSocket.RSocket socket, int maxOutputs, int errorTrigger = int.MaxValue) : base(socket)
 {
     this._maxOutputs   = maxOutputs;
     this._errorTrigger = errorTrigger;
 }
        public static IAsyncEnumerable <string> RequestChannel(this RSocket socket, IAsyncEnumerable <string> inputs, string data = default, string metadata = default)
        {
            IObservable <Payload> source = inputs.Select(a => new Payload(Helpers.StringToByteSequence(a))).ToObservable();

            return(socket.RequestChannel(Helpers.StringToByteSequence(data), Helpers.StringToByteSequence(metadata), source, int.MaxValue).ToAsyncEnumerable().Select(a => Encoding.UTF8.GetString(a.Data.ToArray())));
        }
 public OutputPublisher(RSocket.RSocket socket) : base(socket)
 {
 }
 public RequestStreamRequesterIncomingStream(RSocket socket, Func <int, Task> channelEstablisher) : base(socket, new Publisher <Payload>(), channelEstablisher)
 {
 }
 public RequesterIncomingStream(RSocket socket, IObservable <Payload> outputs, Func <int, Task> channelEstablisher)
 {
     this.Socket              = socket;
     this._outputs            = outputs;
     this._channelEstablisher = channelEstablisher;
 }
 public static async Task RequestFireAndForget(this RSocket socket, string data, string metadata = default)
 {
     await socket.RequestFireAndForget(Helpers.StringToByteSequence(data), Helpers.StringToByteSequence(metadata));
 }
示例#20
0
 public Publisher(RSocket.RSocket socket)
 {
     this.Socket = socket;
 }
        public static IAsyncEnumerable <string> RequestStream(this RSocket socket, string data, string metadata = default)
        {
            var payloads = socket.RequestStream(Helpers.StringToByteSequence(data), Helpers.StringToByteSequence(metadata), int.MaxValue);

            return(payloads.ToAsyncEnumerable().Select(a => Encoding.UTF8.GetString(a.Data.ToArray())));
        }
示例#22
0
 public OutputSubscription(RSocket.RSocket socket, IObserver <Payload> observer, int maxResponses = int.MaxValue, int errorTrigger = int.MaxValue) : base(observer)
 {
     this.Socket        = socket;
     this._maxResponses = maxResponses;
     this._errorTrigger = errorTrigger;
 }
示例#23
0
 public MyEchoServer(RSocket.RSocket socket) : base(socket)
 {
 }