77
88namespace RSocket . RPC
99{
10- public abstract class RSocketService < T > : IRSocketStream
10+ public abstract partial class RSocketService
1111 {
1212 private readonly RSocketClient Client ;
1313
1414 public RSocketService ( RSocketClient client ) { Client = client ; }
1515
16- protected void __RequestFireAndForget ( ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default ) { Client . RequestFireAndForget ( null , data , metadata ) ; }
17-
18- protected async Task < TResult > __RequestFireAndForget < TMessage , TResult > ( string service , string method , TMessage message , Func < TMessage , byte [ ] > intransform , Func < byte [ ] , TResult > outtransform , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default ) =>
19- outtransform ( ( await __RequestFireAndForget ( service , method , new ReadOnlySequence < byte > ( intransform ( message ) ) , metadata , tracing ) ) . ToArray ( ) ) ;
20-
21- protected async Task < TResult > __RequestFireAndForget < TMessage , TResult > ( string service , string method , TMessage message , Func < TMessage , ReadOnlySequence < byte > > intransform , Func < ReadOnlySequence < byte > , TResult > outtransform , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default ) =>
22- outtransform ( await __RequestFireAndForget ( service , method , intransform ( message ) , metadata , tracing ) ) ;
23-
24- protected async Task < ReadOnlySequence < byte > > __RequestFireAndForget ( string service , string method , ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default )
16+ protected Task __RequestFireAndForget < TMessage > ( TMessage message , Func < TMessage , byte [ ] > intransform , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default , string service = default , [ CallerMemberName ] string method = default ) => __RequestFireAndForget ( new ReadOnlySequence < byte > ( intransform ( message ) ) , metadata , tracing , service : service , method : method ) ;
17+ protected Task __RequestFireAndForget < TMessage > ( TMessage message , Func < TMessage , ReadOnlySequence < byte > > intransform , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default , string service = default , [ CallerMemberName ] string method = default ) => __RequestFireAndForget ( intransform ( message ) , metadata , tracing , service : service , method : method ) ;
18+ protected async Task __RequestFireAndForget ( ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default , string service = default , [ CallerMemberName ] string method = default )
2519 {
2620 var receiver = new Receiver ( ) ;
27- await Client . RequestResponse ( receiver , data , new RemoteProcedureCall . RemoteProcedureCallMetadata ( service , method , metadata , tracing ) ) ;
28- return await receiver . Task . ConfigureAwait ( false ) ;
21+ await Client . RequestFireAndForget ( receiver , data , new RemoteProcedureCallMetadata ( service , method , metadata , tracing ) ) . ConfigureAwait ( false ) ;
22+ receiver . TrySetResult ( default ) ;
23+ await receiver . Awaitable ;
2924 }
3025
3126
32- protected async Task < TResult > __RequestResponse < TMessage , TResult > ( TMessage message , Func < TMessage , byte [ ] > intransform , Func < byte [ ] , TResult > outtransform , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default , string service = default , [ CallerMemberName ] string method = default ) =>
33- outtransform ( ( await __RequestResponse ( new ReadOnlySequence < byte > ( intransform ( message ) ) , metadata , tracing , service : service , method : method ) ) . ToArray ( ) ) ;
34-
35- protected async Task < TResult > __RequestResponse < TMessage , TResult > ( TMessage message , Func < TMessage , ReadOnlySequence < byte > > intransform , Func < ReadOnlySequence < byte > , TResult > outtransform , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default , string service = default , [ CallerMemberName ] string method = default ) =>
36- outtransform ( await __RequestResponse ( intransform ( message ) , metadata , tracing , service : service , method : method ) ) ;
37-
27+ protected async Task < TResult > __RequestResponse < TMessage , TResult > ( TMessage message , Func < TMessage , byte [ ] > intransform , Func < byte [ ] , TResult > outtransform , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default , string service = default , [ CallerMemberName ] string method = default ) => outtransform ( ( await __RequestResponse ( new ReadOnlySequence < byte > ( intransform ( message ) ) , metadata , tracing , service : service , method : method ) ) . ToArray ( ) ) ;
28+ protected async Task < TResult > __RequestResponse < TMessage , TResult > ( TMessage message , Func < TMessage , ReadOnlySequence < byte > > intransform , Func < ReadOnlySequence < byte > , TResult > outtransform , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default , string service = default , [ CallerMemberName ] string method = default ) => outtransform ( await __RequestResponse ( intransform ( message ) , metadata , tracing , service : service , method : method ) ) ;
3829 protected async Task < ReadOnlySequence < byte > > __RequestResponse ( ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default , string service = default , [ CallerMemberName ] string method = default )
3930 {
4031 var receiver = new Receiver ( ) ;
41- await Client . RequestResponse ( receiver , data , new RemoteProcedureCall . RemoteProcedureCallMetadata ( service , method , metadata , tracing ) ) ;
42- return await receiver . Task . ConfigureAwait ( false ) ;
32+ await Client . RequestResponse ( receiver , data , new RemoteProcedureCallMetadata ( service , method , metadata , tracing ) ) ;
33+ return await receiver . Awaitable ;
4334 }
4435
4536 //TODO Ask about semantics of this - should it execute the server call before subscription?
4637
4738 protected async Task < ReadOnlySequence < byte > > __RequestStream < TResult > ( string service , string method , ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default )
4839 {
4940 var receiver = new Receiver ( ) ;
50- await Client . RequestStream ( receiver , data , new RemoteProcedureCall . RemoteProcedureCallMetadata ( service , method , metadata , tracing ) , initial : 3 ) ; //TODO Policy!!
41+ await Client . RequestStream ( receiver , data , new RemoteProcedureCallMetadata ( service , method , metadata , tracing ) , initial : 3 ) ; //TODO Policy!!
5142 return await receiver . Task . ConfigureAwait ( false ) ;
5243 }
5344
@@ -56,42 +47,12 @@ protected async Task<ReadOnlySequence<byte>> __RequestStream<TResult>(string ser
5647 //protected void RequestChannel(ReadOnlySequence<byte> data, ReadOnlySequence<byte> metadata = default) { Client.RequestChannel(null, data, metadata); } //TODO Initial?
5748
5849
59- //private class Receiver : Receiver<(ReadOnlySequence<byte> metadata, ReadOnlySequence<byte> data)>, IRSocketStream { }
60-
6150 private class Receiver : TaskCompletionSource < ReadOnlySequence < byte > > , IRSocketStream
6251 {
6352 public void OnCompleted ( ) { }
6453 public void OnError ( Exception error ) => base . SetException ( error ) ;
6554 public void OnNext ( ( ReadOnlySequence < byte > metadata , ReadOnlySequence < byte > data ) value ) => base . SetResult ( value . data ) ;
55+ public ConfiguredTaskAwaitable < ReadOnlySequence < byte > > Awaitable => base . Task . ConfigureAwait ( false ) ;
6656 }
67-
68-
69- public void Dispatch ( )
70- {
71- }
72-
73- //If a Completion arrives before the first dispatch, forward directly.
74- void IObserver < ( ReadOnlySequence < byte > metadata , ReadOnlySequence < byte > data ) > . OnCompleted ( )
75- {
76- throw new NotImplementedException ( ) ;
77- }
78-
79- void IObserver < ( ReadOnlySequence < byte > metadata , ReadOnlySequence < byte > data ) > . OnError ( Exception error )
80- {
81- throw new NotImplementedException ( ) ;
82- }
83-
84- void IObserver < ( ReadOnlySequence < byte > metadata , ReadOnlySequence < byte > data ) > . OnNext ( ( ReadOnlySequence < byte > metadata , ReadOnlySequence < byte > data ) value )
85- {
86- throw new NotImplementedException ( ) ;
87- }
88-
89-
90- private Lazy < List < System . Reflection . MethodInfo > > Methods = new Lazy < List < System . Reflection . MethodInfo > > ( ( ) => GetMethods ( ) ) ;
91-
92- static public List < System . Reflection . MethodInfo > GetMethods ( ) => (
93- from method in typeof ( T ) . GetMethods ( )
94- where method . IsPublic && method . DeclaringType == typeof ( T )
95- select method ) . ToList ( ) ;
9657 }
9758}
0 commit comments