@@ -15,20 +15,25 @@ public abstract class RSocketService<T> : IRSocketStream
15
15
protected void __RequestFireAndForget ( ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default ) { Client . RequestFireAndForget ( null , data , metadata ) ; }
16
16
17
17
18
+ protected async Task < TResult > __RequestResponse < 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 __RequestResponse ( service , method , new ReadOnlySequence < byte > ( intransform ( message ) ) , metadata , tracing ) ) . ToArray ( ) ) ;
18
20
19
- protected async Task < TResult > __RequestResponse < TResult > ( string service , string method , ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default )
21
+ protected async Task < TResult > __RequestResponse < 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 __RequestResponse ( service , method , intransform ( message ) , metadata , tracing ) ) ;
23
+
24
+ protected async Task < ReadOnlySequence < byte > > __RequestResponse ( string service , string method , ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default )
20
25
{
21
- var receiver = new Receiver < TResult > ( ) ;
26
+ var receiver = new Receiver ( ) ;
22
27
await Client . RequestResponse ( receiver , data , new RemoteProcedureCall . RemoteProcedureCallMetadata ( service , method , metadata , tracing ) ) ;
23
28
return await receiver . Task . ConfigureAwait ( false ) ;
24
29
}
25
30
26
31
//TODO Ask about semantics of this - should it execute the server call before subscription?
27
32
28
- protected async Task < TResult > __RequestStream < TResult > ( string service , string method , ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default )
33
+ protected async Task < ReadOnlySequence < byte > > __RequestStream < TResult > ( string service , string method , ReadOnlySequence < byte > data , ReadOnlySequence < byte > metadata = default , ReadOnlySequence < byte > tracing = default )
29
34
{
30
- var receiver = new Receiver < TResult > ( ) ;
31
- await Client . RequestStream ( receiver , data , new RemoteProcedureCall . RemoteProcedureCallMetadata ( service , method , metadata , tracing ) , initial : 3 ) ;
35
+ var receiver = new Receiver ( ) ;
36
+ await Client . RequestStream ( receiver , data , new RemoteProcedureCall . RemoteProcedureCallMetadata ( service , method , metadata , tracing ) , initial : 3 ) ; //TODO Policy!!
32
37
return await receiver . Task . ConfigureAwait ( false ) ;
33
38
}
34
39
@@ -37,6 +42,16 @@ protected async Task<TResult> __RequestStream<TResult>(string service, string me
37
42
//protected void RequestChannel(ReadOnlySequence<byte> data, ReadOnlySequence<byte> metadata = default) { Client.RequestChannel(null, data, metadata); } //TODO Initial?
38
43
39
44
45
+ //private class Receiver : Receiver<(ReadOnlySequence<byte> metadata, ReadOnlySequence<byte> data)>, IRSocketStream { }
46
+
47
+ private class Receiver : TaskCompletionSource < ReadOnlySequence < byte > > , IRSocketStream
48
+ {
49
+ public void OnCompleted ( ) { }
50
+ public void OnError ( Exception error ) => base . SetException ( error ) ;
51
+ public void OnNext ( ( ReadOnlySequence < byte > metadata , ReadOnlySequence < byte > data ) value ) => base . SetResult ( value . data ) ;
52
+ }
53
+
54
+
40
55
public void Dispatch ( )
41
56
{
42
57
}
@@ -57,17 +72,6 @@ public void Dispatch()
57
72
throw new NotImplementedException ( ) ;
58
73
}
59
74
60
- private class Receiver < TResult > : TaskCompletionSource < TResult > , IRSocketStream
61
- {
62
- public Receiver ( ) { }
63
-
64
- public void OnCompleted ( ) { }
65
- public void OnError ( Exception error ) => base . SetException ( error ) ;
66
- public void OnNext ( ( ReadOnlySequence < byte > metadata , ReadOnlySequence < byte > data ) value )
67
- {
68
- Console . WriteLine ( $ "OnNext: [{ value . metadata . Length } ]:[{ value . data . Length } ]") ;
69
- }
70
- }
71
75
72
76
private Lazy < List < System . Reflection . MethodInfo > > Methods = new Lazy < List < System . Reflection . MethodInfo > > ( ( ) => GetMethods ( ) ) ;
73
77
0 commit comments