File tree Expand file tree Collapse file tree
src/main/java/io/github/easy4j/codex/appserver Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ /*
2+ * Copyright (c) 2018-present, easy-4-java (https://github.com/easy-4-java).
3+ *
4+ * Licensed under the Apache License, Version 2.0.
5+ */
6+ package io .github .easy4j .codex .appserver ;
7+
8+ import java .net .http .WebSocket ;
9+ import java .util .Objects ;
10+ import java .util .concurrent .CompletableFuture ;
11+ import java .util .concurrent .CompletionStage ;
12+
13+ /**
14+ * Serializes text writes for one JDK {@link WebSocket}. The JDK WebSocket
15+ * contract permits only one outstanding send at a time, so every write is
16+ * chained after the previous write future.
17+ */
18+ final class CodexWebSocketSender {
19+
20+ private final WebSocket socket ;
21+ private CompletionStage <WebSocket > tail ;
22+
23+ CodexWebSocketSender (WebSocket socket ) {
24+ this .socket = Objects .requireNonNull (socket , "socket" );
25+ this .tail = CompletableFuture .completedFuture (socket );
26+ }
27+
28+ synchronized CompletionStage <WebSocket > send (String text ) {
29+ Objects .requireNonNull (text , "text" );
30+ CompletionStage <WebSocket > next =
31+ tail .thenCompose (ignored -> socket .sendText (text , true ));
32+ tail = next ;
33+ return next ;
34+ }
35+ }
You can’t perform that action at this time.
0 commit comments