|
6 | 6 | import lombok.extern.slf4j.Slf4j; |
7 | 7 | import org.springframework.stereotype.Component; |
8 | 8 | import org.springframework.web.socket.BinaryMessage; |
| 9 | +import org.springframework.web.socket.TextMessage; |
9 | 10 | import org.springframework.web.socket.WebSocketSession; |
10 | 11 | import uz.server.domain.entity.Tunnel; |
11 | 12 | import uz.server.domain.entity.User; |
@@ -35,6 +36,7 @@ public class EventManager { |
35 | 36 | private final ObjectMapper objectMapper; |
36 | 37 | private final RequestHolder requestHolder; |
37 | 38 | private final TunnelService tunnelService; |
| 39 | + private final ResponseHolder responseHolder; |
38 | 40 |
|
39 | 41 | public void onConnectionEstablished(WebSocketSession session) { |
40 | 42 | log.info("WebSocket connection established: sessionId={}", session.getId()); |
@@ -105,27 +107,31 @@ public void onConnectionClosed(WebSocketSession session) { |
105 | 107 | sessionHolder.removeSession(session.getId()); |
106 | 108 | } |
107 | 109 |
|
108 | | - public void onResponseReceived(BinaryMessage message) { |
109 | | - ByteBuffer payload = message.getPayload(); |
| 110 | + public void onResponseReceived(TextMessage message, String sessionId) { |
| 111 | + log.info("Response received: sessionId={}", sessionId); |
| 112 | + String payload = message.getPayload(); |
110 | 113 |
|
111 | | - byte[] bytes = new byte[payload.remaining()]; |
112 | | - payload.get(bytes); |
| 114 | + responseHolder.add(sessionId, payload); |
113 | 115 |
|
114 | | - ObjectMapper objectMapper = new ObjectMapper(); |
115 | | - Response response; |
| 116 | + if (message.isLast()){ |
| 117 | + log.info("Response is last: sessionId={}", sessionId); |
| 118 | + ObjectMapper objectMapper = new ObjectMapper(); |
| 119 | + Response response; |
116 | 120 |
|
117 | | - try { |
118 | | - response = objectMapper.readValue(bytes, Response.class); |
119 | | - } catch (IOException e) { |
120 | | - log.error("Error while deserializing response: {}", e.getMessage()); |
121 | | - return; |
122 | | - } |
| 121 | + try { |
| 122 | + response = objectMapper.readValue(responseHolder.get(sessionId), Response.class); |
| 123 | + } catch (IOException e) { |
| 124 | + log.error("Error while deserializing response: {}", e.getMessage()); |
| 125 | + return; |
| 126 | + } |
123 | 127 |
|
124 | | - log.info("Response received: reqId={}, status={}, bodyLength={}", |
125 | | - response.getRequestId(), response.getStatus(), |
126 | | - response.getBody() != null ? response.getBody().length() : 0); |
| 128 | + log.info("Response received: reqId={}, status={}, bodyLength={}", |
| 129 | + response.getRequestId(), response.getStatus(), |
| 130 | + response.getBody() != null ? response.getBody().length() : 0); |
127 | 131 |
|
128 | | - requestHolder.complete(response); |
| 132 | + responseHolder.remove(sessionId); |
| 133 | + requestHolder.complete(response); |
| 134 | + } |
129 | 135 | } |
130 | 136 |
|
131 | 137 | public Response sendRequestToCLI(String subdomain, Request request) { |
|
0 commit comments