-
Notifications
You must be signed in to change notification settings - Fork 382
/
2020-11-27-adr-berty-grpc-bridge.txt
77 lines (77 loc) · 15.8 KB
/
2020-11-27-adr-berty-grpc-bridge.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
┌──────────────────────────────────────────────────────────────────────────────────────────┐
│service BridgeService { │
│ // CreateClient client a new bridge client │
│ rpc CreateClient (CreateClient.Request) returns (CreateClient.Reply); │
│ │
│ // ClientInvokeUnary invoke a unary method │
│ rpc ClientInvokeUnary (ClientInvokeUnary.Request) returns (ClientInvokeUnary.Reply); │
│ │
│ // CreateStream create a stream │
│ rpc CreateClientStream (ClientCreateStream.Request) returns (ClientCreateStream.Reply); │
│ │
│ // Send Message over the given stream │
│ rpc ClientStreamSend (ClientStreamSend.Request) returns (ClientStreamSend.Reply); │
│ │
│ // Recv message over the given stream │
│ rpc ClientStreamRecv (ClientStreamRecv.Request) returns (ClientStreamRecv.Reply); │
│ │
│ // Close the given stream │
│ rpc ClientStreamClose (ClientStreamClose.Request) returns (ClientStreamClose.Reply); │
│} │
└──────────────────────────────────────────────────────────────────────────────────────────┘
│
│
│
│
│
┌──────────────────────┘
│
│
┏━━━━━━┳───────────────┼────────────────────────────────────────────┐ ┏━━━━━━━━━━━━━━━━━━━━━━━━┳─────────────────────┐ ┏━━━━━━┳──────────────────────────────────────────────────────────────┐
┃ JS ┃ │ │ ┃ NATIVE (ios/android) ┃ │ ┃ Go ┃ │
┣━━━━━━┛ ◎ │ ┣━━━━━━━━━━━━━━━━━━━━━━━━┛ │ ┣━━━━━━┛ │
│ ┌──────────────────┐ ┌──────────────┐ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ ┌────────────┐ ┌────────────────┐ ┌──────────────────┐ │
│ │ │ │ RPC native │ │ │ ┌───────────────────────────────────────────┐│ │ │ │ │ │ │ │ │
│ │ Bridge Service │ │ Transport │ │ │ │ ││ │ │ Buffer │ │ ClientConn │ │ Bridge Service │ │
│ ┌─▶│ Client │────────▶│ (Unary Only) │──────────┼───────┼▶│InvokeMethod (Base64EncodedMessage: String)│├───────────┼───▶│ Listener │────▶│(Bridge Service)│────▶│ Server │──┐│
│ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││
│ │ │ │ │ │ │ │ └───────────────────────────────────────────┘│ │ └────────────┘ └────────────────┘ └──────────────────┘ ││
│ │ │ │ │ │ │ │ │ │ ││
│ │ │ │ │ │ │ │ │ │ ││
│ │ └──────────────────┘ └──────────────┘ │ │ │ │ ┌────────────────────────────────────────────────────────────┘│
│ │ │ │ │ │ │ │
│ └─────────────────────────────────────────────────┐ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ ┌──────────────┐ │ │ │ │ │ │ ┌────────────────┐ │
│ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ ┌──────────────────────┐ │ │ │ │ │ │ │ │ ┌──────────────────────┐ │
│ │ Messenger Service │ │ │ │ │ │ │ │ │ │ Messenger Service │ │
│ │ Client │────┐ │ │ │ │ │ │ │ │ ┌──────▶│ Server │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ └──────────────────────┘ │ │ │ │ │ │ │ │ │ │ └──────────────────────┘ │
│ ┌──────────────────────┐ │ │ Bridge │ │ │ │ │ │ │ │ ┌──────────────────────┐ │
│ │ Protocol Service │ │ │ Transport │ │ │ │ │ │GRPC ClientConn │ │ │ Protocol Service │ │
│ │ Client │────┼───▶│(Stream/Unary)│──┘ │ │ └─▶│(Mixed Services)│───────┼──────▶│ Server │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │
│ └──────────────────────┘ │ │ │ │ │ │ │ │ └──────────────────────┘ │
│ ┌──────────────────────┐ │ │ │ │ │ │ │ │ ┌──────────────────────┐ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ ... │────┘ │ │ │ │ │ │ └──────▶│ ... │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ └──────────────────────┘ │ │ │ │ │ │ └──────────────────────┘ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ └──────────────┘ │ │ └────────────────┘ │
│ │ │ │
│ │ │ │
│ │ │ │
└───────────────────────────────────────────────────────────────────┘ └─────────────────────────────────────────────────────────────────────┘