Skip to content

Commit 12942cd

Browse files
committed
update
1 parent f44171c commit 12942cd

File tree

5 files changed

+74
-40
lines changed

5 files changed

+74
-40
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
<modelVersion>4.0.0</modelVersion>
1212
<artifactId>websocket-client</artifactId>
13-
<version>1.0.15</version>
13+
<version>1.0.16</version>
1414
<name>WebsocketClient</name>
1515
<packaging>jar</packaging>
1616

src/main/java/info/unterrainer/websocketclient/WebsocketConnection.java

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public class WebsocketConnection implements AutoCloseable {
3737

3838
@Getter
3939
private final String host;
40+
@lombok.Builder.Default
41+
private final String name = "";
4042
private final Consumer<EventContext> onOpenHandler;
4143
private final Consumer<EventContext> onMessageHandler;
4244
private final Consumer<EventContext> onBinaryMessageHandler;
@@ -63,7 +65,7 @@ public Session awaitOpen(Duration timeoutInMillis) {
6365
}
6466
return sessionReady.get(timeoutInMillis.toMillis(), TimeUnit.MILLISECONDS);
6567
} catch (Exception e) {
66-
throw new IllegalStateException("WebSocket did not open in time.", e);
68+
throw new IllegalStateException("(" + name + ") WebSocket did not open in time.", e);
6769
}
6870
}
6971

@@ -75,43 +77,45 @@ public void sendPing() {
7577
try {
7678
s.getBasicRemote().sendPing(ByteBuffer.allocate(1));
7779
} catch (Exception e) {
78-
log.error("Error sending ping: ", e);
79-
throw new WebsocketSendingMessageException(String.format("Failed to send ping."), e);
80+
log.error("(" + name + ") Error sending ping: ", e);
81+
throw new WebsocketSendingMessageException(String.format("(" + name + ") Failed to send ping."), e);
8082
}
81-
log.debug("Sent ping");
83+
log.debug("(" + name + ") Sent ping");
8284
}
8385

8486
public void send(String message) {
8587
Session s = awaitOpen(Duration.ofMillis(5000L));
8688
try {
8789
s.getBasicRemote().sendText(message);
8890
} catch (Exception e) {
89-
log.error("Error sending message: ", e);
90-
throw new WebsocketSendingMessageException(String.format("Failed to send message [%s].", message), e);
91+
log.error("(" + name + ") Error sending message: ", e);
92+
throw new WebsocketSendingMessageException(
93+
String.format("(" + name + ") Failed to send message [%s].", message), e);
9194
}
92-
log.debug("Sent message: " + message);
95+
log.debug("(" + name + ") Sent message: " + message);
9396
}
9497

9598
public void send(byte[] message) {
9699
Session s = awaitOpen(Duration.ofMillis(5000L));
97100
try {
98101
s.getBasicRemote().sendBinary(java.nio.ByteBuffer.wrap(message));
99102
} catch (Exception e) {
100-
log.error("Error sending binary message: ", e);
101-
throw new WebsocketSendingMessageException("Failed to send binary message.", e);
103+
log.error("(" + name + ") Error sending binary message: ", e);
104+
throw new WebsocketSendingMessageException("(" + name + ") Failed to send binary message.", e);
102105
}
103-
log.debug("Sent binary message of length: " + message.length);
106+
log.debug("(" + name + ") Sent binary message of length: " + message.length);
104107
}
105108

106109
public <T> void send(T message) {
107110
Session s = awaitOpen(Duration.ofMillis(5000L));
108111
try {
109112
s.getBasicRemote().sendText(jsonMapper.toStringFrom(message));
110113
} catch (Exception e) {
111-
log.error("Error sending message: ", e);
112-
throw new WebsocketSendingMessageException(String.format("Failed to send message [%s].", message), e);
114+
log.error("(" + name + ") Error sending message [{}]", message, e);
115+
throw new WebsocketSendingMessageException(
116+
String.format("(" + name + ") Failed to send message [%s].", message), e);
113117
}
114-
log.debug("Sent message: " + message);
118+
log.debug("(" + name + ") Sent message: " + message);
115119
}
116120

117121
@Override
@@ -120,48 +124,52 @@ public void close() {
120124
try {
121125
s.close(new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE, "Normal closure"));
122126
} catch (IOException e) {
123-
log.error("Error closing session.", e);
124-
throw new WebsocketClosingException("Failed to close WebSocket session.", e);
127+
log.error("(" + name + ") Error closing session.", e);
128+
throw new WebsocketClosingException("(" + name + ") Failed to close WebSocket session.", e);
125129
}
126130
}
127131

128132
public void establish() {
129133
String at = null;
130134
String accessToken = null;
131-
log.debug("Establish called.");
135+
log.debug("(" + name + ") Establish called.");
132136

133137
ClientManager container;
134138
try {
135139
container = ClientManager.createClient();
136-
log.info("ClientManager created");
140+
log.info("(" + name + ") ClientManager created");
137141
} catch (Exception e) {
138-
log.error("Failed to create ClientManager: {}", e.getMessage(), e);
139-
throw new WebsocketConnectingException("Failed to create WebSocket ClientManager.", e);
142+
log.error("(" + name + ") Failed to create ClientManager: {}", e.getMessage(), e);
143+
throw new WebsocketConnectingException("(" + name + ") Failed to create WebSocket ClientManager.", e);
140144
}
141-
endpoints = new WebsocketEndpoints(this);
145+
endpoints = new WebsocketEndpoints(this, name);
142146

143147
if (keycloakHost != null) {
144148
OauthTokenManager tokenManager = new OauthTokenManager(keycloakHost, keycloakClient);
145149
LocalOauthTokens tokens = tokenManager.getTokensFromCredentials(keycloakClient, keycloakUser,
146150
keycloakPassword);
147151
accessToken = tokens.getAccessToken();
148152
at = "Bearer " + accessToken;
153+
log.debug("(" + name + ") Access token retrieved: {}", accessToken);
149154
}
150155

151156
try {
152157
container.connectToServer(endpoints,
153158
ClientEndpointConfig.Builder.create().configurator(new ClientEndpointConfig.Configurator() {
154159
}).build(), URI.create(host));
155160
if (at != null) {
161+
log.debug("(" + name + ") Access token provided, sending authentication token.");
156162
Session s = awaitOpen(Duration.ofMillis(5000L));
157163
s.getBasicRemote().sendText(at);
164+
log.debug("(" + name + ") Authentication token sent: {}", at);
158165
} else {
159-
log.debug("No access token provided, connecting without authentication.");
166+
log.debug("(" + name + ") No access token provided, connecting without authentication.");
160167
}
161168
} catch (Exception e) {
162-
log.error("Error connecting to WebSocket server: ", e);
163-
throw new WebsocketConnectingException("Failed to connect to WebSocket server at " + host, e);
169+
log.error("(" + name + ") Error connecting to WebSocket server: ", e);
170+
throw new WebsocketConnectingException("(" + name + ") Failed to connect to WebSocket server at " + host,
171+
e);
164172
}
165-
log.info("WebSocket client connected to: {}", host);
173+
log.info("(" + name + ") WebSocket client connected to: {}", host);
166174
}
167175
}

src/main/java/info/unterrainer/websocketclient/WebsocketEndpoints.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,30 @@
1212
public class WebsocketEndpoints extends Endpoint {
1313

1414
private final WebsocketConnection client;
15+
private final String name;
1516

16-
public WebsocketEndpoints(WebsocketConnection client) {
17+
public WebsocketEndpoints(WebsocketConnection client, String name) {
1718
this.client = client;
19+
this.name = name;
1820
}
1921

2022
@Override
2123
public void onOpen(Session session, EndpointConfig config) {
2224
client.sessionReady().complete(session);
2325
session.setMaxIdleTimeout(0L);
24-
log.info("Connected to server");
26+
log.info("(" + name + ") Connected to server");
2527
if (client.onOpenHandler() != null) {
2628
try {
2729
client.onOpenHandler()
2830
.accept(EventContext.builder().session(session).jsonMapper(client.jsonMapper()).build());
2931
} catch (Exception e) {
30-
log.error("Error executing onOpen handler: ", e);
32+
log.error("(" + name + ") Error executing onOpen handler: ", e);
3133
}
3234
}
3335

3436
// onMessage-Handler
3537
session.addMessageHandler(String.class, message -> {
36-
log.debug("Received message: " + message);
38+
log.debug("(" + name + ") Received message: " + message);
3739
client.awaitOpen(Duration.ofMillis(5000L));
3840
if (client.onMessageHandler() != null) {
3941
try {
@@ -44,13 +46,13 @@ public void onOpen(Session session, EndpointConfig config) {
4446
.message(message)
4547
.build());
4648
} catch (Exception e) {
47-
log.error("Error executing onMessage handler: ", e);
49+
log.error("(" + name + ") Error executing onMessage handler: ", e);
4850
}
4951
}
5052
});
5153

5254
session.addMessageHandler(byte[].class, message -> {
53-
log.debug("Received binary-message: " + message);
55+
log.debug("(" + name + ") Received binary-message: " + message);
5456
client.awaitOpen(Duration.ofMillis(5000L));
5557
if (client.onBinaryMessageHandler() != null) {
5658
try {
@@ -61,7 +63,7 @@ public void onOpen(Session session, EndpointConfig config) {
6163
.binaryMessage(message)
6264
.build());
6365
} catch (Exception e) {
64-
log.error("Error executing onMessage handler: ", e);
66+
log.error("(" + name + ") Error executing onMessage handler: ", e);
6567
}
6668
}
6769
});
@@ -70,27 +72,27 @@ public void onOpen(Session session, EndpointConfig config) {
7072
@Override
7173
public void onClose(Session session, CloseReason closeReason) {
7274
Session s = client.awaitOpen(Duration.ofMillis(5000L));
73-
log.info("Disconnected from server: {}", closeReason);
75+
log.info("(" + name + ") Disconnected from server: {}", closeReason);
7476
if (client.onCloseHandler() != null) {
7577
try {
7678
client.onCloseHandler()
7779
.accept(EventContext.builder().session(session).jsonMapper(client.jsonMapper()).build());
7880
} catch (Exception e) {
79-
log.error("Error executing onClose handler: ", e);
81+
log.error("(" + name + ") Error executing onClose handler: ", e);
8082
}
8183
}
8284

8385
try {
8486
s.close();
8587
} catch (Exception e) {
86-
log.error("Error closing session: ", e);
88+
log.error("(" + name + ") Error closing session: ", e);
8789
}
8890
}
8991

9092
@Override
9193
public void onError(Session session, Throwable throwable) {
9294
client.awaitOpen(Duration.ofMillis(5000L));
93-
log.error("Error occurred: ", throwable);
95+
log.error("(" + name + ") Error occurred: ", throwable);
9496
if (client.onErrorHandler() != null) {
9597
try {
9698
client.onErrorHandler()
@@ -100,7 +102,7 @@ public void onError(Session session, Throwable throwable) {
100102
.error(throwable)
101103
.build());
102104
} catch (Exception e) {
103-
log.error("Error executing onError handler: ", e);
105+
log.error("(" + name + ") Error executing onError handler: ", e);
104106
}
105107
}
106108
}

src/test/java/info/unterrainer/websocketclient/WebSocketClientTest.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class WebSocketClientTest {
88
public void connectNormalWs() throws InterruptedException {
99
try (WebsocketConnection client = WebsocketConnection.builder()
1010
.host("ws://localhost:7070/ws")
11+
.name("TestClient")
1112
.onMessageHandler(message -> System.out.println("Received message: " + message))
1213
.build()) {
1314
client.establish();
@@ -23,6 +24,7 @@ public void connectNormalWs() throws InterruptedException {
2324
public void connectOauthWss() throws InterruptedException {
2425
try (WebsocketConnection client = WebsocketConnection.builder()
2526
.host("ws://localhost:7070/jwt")
27+
.name("TestClient")
2628
.onMessageHandler(message -> System.out.println("Received message: " + message))
2729
.keycloakHost("https://keycloak.lan.elite-zettl.at")
2830
.keycloakClient("Cms")
@@ -38,10 +40,31 @@ public void connectOauthWss() throws InterruptedException {
3840
}
3941
}
4042

43+
@Test
44+
public void connectOauthWssLocalEliteServer() throws InterruptedException {
45+
try (WebsocketConnection client = WebsocketConnection.builder()
46+
.host("ws://localhost:7070/llm")
47+
.name("TestClient")
48+
.onMessageHandler(message -> System.out.println("Received message: " + message))
49+
.keycloakHost("https://keycloak.lan.elite-zettl.at")
50+
.keycloakClient("Cms")
51+
.keycloakUser("[email protected]")
52+
.keycloakPassword("test")
53+
.build()) {
54+
client.establish();
55+
56+
client.send("{\"type\":\"QUESTION\",\"message\":\"Hello WebSocket!\"}");
57+
client.send("{\"type\":\"QUESTION\",\"message\":\"another hello\"}");
58+
59+
Thread.sleep(500);
60+
}
61+
}
62+
4163
@Test
4264
public void connectOauthWssExternal() throws InterruptedException {
4365
try (WebsocketConnection client = WebsocketConnection.builder()
4466
.host("wss://cms-llm.lan.elite-zettl.at/llm")
67+
.name("TestClient")
4568
.onMessageHandler(message -> System.out.println("Received message: " + message))
4669
.keycloakHost("https://keycloak.lan.elite-zettl.at")
4770
.keycloakClient("Cms")
@@ -50,8 +73,8 @@ public void connectOauthWssExternal() throws InterruptedException {
5073
.build()) {
5174
client.establish();
5275

53-
client.send("Hello WebSocket!");
54-
client.send("another hello");
76+
client.send("{\"type\":\"QUESTION\",\"message\":\"Hello WebSocket!\"}");
77+
client.send("{\"type\":\"QUESTION\",\"message\":\"another hello\"}");
5578

5679
Thread.sleep(500);
5780
}

src/test/resources/log4j.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
1111

1212
# Print only info for imported libs.
1313
log4j.logger.io.netty=WARN
14-
log4j.logger.org.eclipse.milo=WARN
14+
log4j.logger.org.eclipse.milo=WARN
15+
log4j.logger.info.unterrainer.websocketclient.WebsocketConnection=DEBUG

0 commit comments

Comments
 (0)