-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwebsockethandler.drawio
More file actions
25 lines (25 loc) · 16.6 KB
/
websockethandler.drawio
File metadata and controls
25 lines (25 loc) · 16.6 KB
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
<mxfile host="app.diagrams.net" modified="2024-01-19T03:03:10.770Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" etag="OpGfZn5w029-oJzovRp_" version="22.1.18" type="github">
<diagram name="第 1 页" id="TmWcDYK_UgiakPwoPVKv">
<mxGraphModel dx="954" dy="526" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="5YAw_FNIZ0tjdUvr30zQ-1" value="<pre style="background-color:#ffffff;color:#080808;font-family:'JetBrains Mono',monospace;font-size:9.8pt;">session = new Session(<span style="color:#000000;">state</span>, <span style="color:#000000;">agent</span>, <span style="color:#000000;">remoteCapability</span>)</pre>" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="140" width="500" height="60" as="geometry" />
</mxCell>
<mxCell id="5YAw_FNIZ0tjdUvr30zQ-2" value="<pre style="background-color:#ffffff;color:#080808;font-family:'JetBrains Mono',monospace;font-size:9.8pt;">listener = new <span style="color:#000000;">Provider</span>.<span style="color:#000000;">Listener</span>() {<br> <span style="color:#0033b3;">private </span><span style="color:#000000;">Object </span><span style="color:#871094;">providerSession</span>;<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketConnect</span>(<span style="color:#000000;">Object </span>providerSession) {<br> <span style="color:#0033b3;">this</span>.<span style="color:#871094;">providerSession </span>= providerSession;<br> <span style="color:#851691;">session</span>.startPings();<br> <span style="color:#851691;">session</span>.opened();<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public </span><span style="color:#000000;">Object </span><span style="color:#00627a;">getProviderSession</span>() {<br> <span style="color:#0033b3;">return </span><span style="color:#871094;">providerSession</span>;<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketClose</span>(<span style="color:#0033b3;">int </span>statusCode, <span style="color:#000000;">String </span>reason) {<br> <span style="color:#851691;">session</span>.stopPings();<br> <span style="color:#851691;">session</span>.closed(statusCode, reason);<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketError</span>(<span style="color:#000000;">Throwable </span>cause) {<br> <span style="color:#0033b3;">if </span>(cause <span style="color:#0033b3;">instanceof </span><span style="color:#000000;">ClosedChannelException</span>) {<br> onWebSocketClose(<span style="color:#1750eb;">0</span>, cause.toString());<br> } <span style="color:#0033b3;">else </span>{<br> <span style="color:#851691;">session</span>.error(cause);<br> }<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketBinary</span>(<span style="color:#0033b3;">byte</span>[] payload, <span style="color:#0033b3;">int </span>offset, <span style="color:#0033b3;">int </span>length) {<br> <span style="color:#0033b3;">try </span>{<br> <span style="color:#851691;">session</span>.binary(payload, offset, length);<br> } <span style="color:#0033b3;">catch </span>(<span style="color:#000000;">IOException </span>x) {<br> <span style="color:#851691;">session</span>.error(x);<br> }<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketText</span>(<span style="color:#000000;">String </span>message) {<br> <span style="color:#0033b3;">try </span>{<br> <span style="color:#851691;">session</span>.text(message);<br> } <span style="color:#0033b3;">catch </span>(<span style="color:#000000;">IOException </span>x) {<br> <span style="color:#851691;">session</span>.error(x);<br> }<br> }<br>}</pre>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="120" y="240" width="620" height="800" as="geometry" />
</mxCell>
<mxCell id="5YAw_FNIZ0tjdUvr30zQ-3" value="<pre style="background-color:#ffffff;color:#080808;font-family:'JetBrains Mono',monospace;font-size:9.8pt;">new <span style="color:#000000;">WebSocketListener</span>() {<br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketBinary</span>(<span style="color:#0033b3;">byte</span>[] payload, <span style="color:#0033b3;">int </span>offset, <span style="color:#0033b3;">int </span>length) {<br> <span style="color:#851691;">listener</span>.onWebSocketBinary(payload, offset, length);<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketText</span>(<span style="color:#000000;">String </span>message) {<br> <span style="color:#851691;">listener</span>.onWebSocketText(message);<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketClose</span>(<span style="color:#0033b3;">int </span>statusCode, <span style="color:#000000;">String </span>reason) {<br> <span style="color:#851691;">listener</span>.onWebSocketClose(statusCode, reason);<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketConnect</span>(<span style="color:#000000;">Session </span>session) {<br> <span style="color:#851691;">listener</span>.onWebSocketConnect(session);<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">onWebSocketError</span>(<span style="color:#000000;">Throwable </span>cause) {<br> <span style="color:#851691;">listener</span>.onWebSocketError(cause);<br> }<br>};</pre>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="120" y="1080" width="620" height="460" as="geometry" />
</mxCell>
<mxCell id="5YAw_FNIZ0tjdUvr30zQ-4" value="<pre style="background-color:#ffffff;color:#080808;font-family:'JetBrains Mono',monospace;font-size:9.8pt;">handler = new <span style="color:#000000;">Handler</span>() {<br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public </span><span style="color:#000000;">Future</span>&lt;<span style="color:#000000;">Void</span>&gt; <span style="color:#00627a;">sendBinary</span>(<span style="color:#000000;">ByteBuffer </span>data) <span style="color:#0033b3;">throws </span><span style="color:#000000;">IOException </span>{<br> <span style="color:#000000;">CompletableFuture</span>&lt;<span style="color:#000000;">Void</span>&gt; <span style="color:#000000;">f </span>= <span style="color:#0033b3;">new </span>CompletableFuture&lt;&gt;();<br> session().getRemote().sendBytes(data, <span style="color:#0033b3;">new </span>WriteCallbackImpl(<span style="color:#000000;">f</span>));<br> <span style="color:#0033b3;">return </span><span style="color:#000000;">f</span>;<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">sendBinary</span>(<span style="color:#000000;">ByteBuffer </span>partialByte, <span style="color:#0033b3;">boolean </span>isLast) <span style="color:#0033b3;">throws </span><span style="color:#000000;">IOException </span>{<br> session().getRemote().sendPartialBytes(partialByte, isLast);<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public </span><span style="color:#000000;">Future</span>&lt;<span style="color:#000000;">Void</span>&gt; <span style="color:#00627a;">sendText</span>(<span style="color:#000000;">String </span>text) <span style="color:#0033b3;">throws </span><span style="color:#000000;">IOException </span>{<br> <span style="color:#000000;">CompletableFuture</span>&lt;<span style="color:#000000;">Void</span>&gt; <span style="color:#000000;">f </span>= <span style="color:#0033b3;">new </span>CompletableFuture&lt;&gt;();<br> session().getRemote().sendString(text, <span style="color:#0033b3;">new </span>WriteCallbackImpl(<span style="color:#000000;">f</span>));<br> <span style="color:#0033b3;">return </span><span style="color:#000000;">f</span>;<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public </span><span style="color:#000000;">Future</span>&lt;<span style="color:#000000;">Void</span>&gt; <span style="color:#00627a;">sendPing</span>(<span style="color:#000000;">ByteBuffer </span>applicationData) <span style="color:#0033b3;">throws </span><span style="color:#000000;">IOException </span>{<br> <span style="color:#000000;">CompletableFuture</span>&lt;<span style="color:#000000;">Void</span>&gt; <span style="color:#000000;">f </span>= <span style="color:#0033b3;">new </span>CompletableFuture&lt;&gt;();<br> session().getRemote().sendPing(applicationData, <span style="color:#0033b3;">new </span>WriteCallbackImpl(<span style="color:#000000;">f</span>));<br> <span style="color:#0033b3;">return </span><span style="color:#000000;">f</span>;<br> }<br><br> <span style="color:#9e880d;">@Override<br></span><span style="color:#9e880d;"> </span><span style="color:#0033b3;">public void </span><span style="color:#00627a;">close</span>() <span style="color:#0033b3;">throws </span><span style="color:#000000;">IOException </span>{<br> session().close();<br> }<br><br> <span style="color:#0033b3;">private </span><span style="color:#000000;">Session </span><span style="color:#00627a;">session</span>() {<br> <span style="color:#000000;">Session session </span>= (<span style="color:#000000;">Session</span>) <span style="color:#851691;">listener</span>.getProviderSession();<br> <span style="color:#0033b3;">if </span>(<span style="color:#000000;">session </span>== <span style="color:#0033b3;">null</span>) {<br> <span style="color:#0033b3;">throw new </span>IllegalStateException(<span style="color:#067d17;">"missing session"</span>);<br> }<br> <span style="color:#0033b3;">return </span><span style="color:#000000;">session</span>;<br> }<br>};</pre>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="790" y="1080" width="850" height="670" as="geometry" />
</mxCell>
<mxCell id="5YAw_FNIZ0tjdUvr30zQ-5" value="session.handler = handler" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="130" y="1800" width="370" height="120" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>