Skip to content

Commit 6652236

Browse files
authored
BAEL-8530: Introduction to Netty-SocketIO (#18722)
* BAEL-8530: Introduction to Netty-SocketIO * Changed the SocketIO test to a main class
1 parent b3ba302 commit 6652236

File tree

3 files changed

+173
-2
lines changed

3 files changed

+173
-2
lines changed

libraries-server-2/pom.xml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@
8282
<artifactId>smack-java7</artifactId>
8383
<version>${smack.version}</version>
8484
</dependency>
85+
<dependency>
86+
<groupId>com.corundumstudio.socketio</groupId>
87+
<artifactId>netty-socketio</artifactId>
88+
<version>${netty-socketio.version}</version>
89+
</dependency>
8590
</dependencies>
8691

8792
<build>
@@ -126,11 +131,11 @@
126131
<jetty.version>9.4.27.v20200227</jetty.version>
127132
<alpn.version>8.1.11.v20170118</alpn.version>
128133
<netty.version>4.1.104.Final</netty.version>
134+
<netty-socketio.version>2.0.13</netty-socketio.version>
129135
<tomcat.version>8.5.24</tomcat.version>
130136
<httpclient.version>4.5.3</httpclient.version>
131137
<nanohttpd.version>2.3.1</nanohttpd.version>
132138
<smack.version>4.3.1</smack.version>
133-
<netty.version>4.1.20.Final</netty.version>
134139
</properties>
135140

136-
</project>
141+
</project>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.baeldung.socketio;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
import com.corundumstudio.socketio.Configuration;
7+
import com.corundumstudio.socketio.SocketIOServer;
8+
9+
public class Server {
10+
private static final Logger LOG = LoggerFactory.getLogger(Server.class);
11+
12+
public static void main(String[] args) throws Exception {
13+
Configuration config = new Configuration();
14+
config.setHostname("localhost");
15+
config.setPort(8081);
16+
17+
SocketIOServer server = new SocketIOServer(config);
18+
19+
server.addConnectListener(client -> {
20+
LOG.info("New connection from client {}", client.getRemoteAddress());
21+
client.joinRoom("testroom");
22+
23+
client.getNamespace().getRoomOperations("testroom")
24+
.sendEvent("message", "Hello from " + client.getRemoteAddress());
25+
});
26+
27+
server.addDisconnectListener(client -> {
28+
LOG.info("Disconnection from client {}", client.getRemoteAddress());
29+
});
30+
31+
server.addEventListener("message",String.class, (client, message, request) -> {
32+
LOG.info("Received message from client {}: {}", client.getRemoteAddress(), message);
33+
});
34+
35+
server.start();
36+
37+
Thread.currentThread().join();
38+
}
39+
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Socket.IO Client</title>
7+
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.8.1/socket.io.js"></script>
8+
</head>
9+
<body>
10+
<h1>Socket.IO Client</h1>
11+
12+
<div>
13+
<label for="serverUrl">Server URL:</label>
14+
<input type="text" id="serverUrl" placeholder="ws://localhost:8001" value="ws://localhost:8001">
15+
<button onclick="connectToServer()">Connect</button>
16+
<button onclick="disconnectFromServer()">Disconnect</button>
17+
</div>
18+
19+
<div>
20+
<input type="text" id="messageInput" placeholder="Enter message">
21+
<button onclick="sendMessage()">Send Message</button>
22+
</div>
23+
24+
<div>
25+
<h3>Connection Status: <span id="status">Disconnected</span></h3>
26+
</div>
27+
28+
<div>
29+
<h3>Messages:</h3>
30+
<ul id="messageList"></ul>
31+
</div>
32+
33+
<script>
34+
let socket = null;
35+
const messageList = document.getElementById('messageList');
36+
const statusElement = document.getElementById('status');
37+
const messageInput = document.getElementById('messageInput');
38+
39+
function addMessage(message, type = 'info') {
40+
const li = document.createElement('li');
41+
const timestamp = new Date().toLocaleTimeString();
42+
li.textContent = `[${timestamp}] ${type.toUpperCase()}: ${message}`;
43+
messageList.appendChild(li);
44+
messageList.scrollTop = messageList.scrollHeight;
45+
}
46+
47+
function updateStatus(status) {
48+
statusElement.textContent = status;
49+
}
50+
51+
function connectToServer() {
52+
const serverUrl = document.getElementById('serverUrl').value;
53+
54+
if (socket) {
55+
socket.disconnect();
56+
}
57+
58+
try {
59+
socket = io(serverUrl);
60+
61+
socket.on('connect', () => {
62+
updateStatus('Connected');
63+
addMessage(`Connected to ${serverUrl}`, 'success');
64+
});
65+
66+
socket.on('disconnect', () => {
67+
updateStatus('Disconnected');
68+
addMessage('Disconnected from server', 'warning');
69+
});
70+
71+
socket.on('connect_error', (error) => {
72+
updateStatus('Connection Error');
73+
addMessage(`Connection error: ${error.message}`, 'error');
74+
});
75+
76+
// Listen for any incoming messages
77+
socket.onAny((eventName, ...args) => {
78+
if (eventName !== 'connect' && eventName !== 'disconnect' && eventName !== 'connect_error') {
79+
addMessage(`Event '${eventName}': ${JSON.stringify(args)}`, 'received');
80+
}
81+
});
82+
83+
} catch (error) {
84+
addMessage(`Failed to connect: ${error.message}`, 'error');
85+
}
86+
}
87+
88+
function disconnectFromServer() {
89+
if (socket) {
90+
socket.disconnect();
91+
socket = null;
92+
updateStatus('Disconnected');
93+
addMessage('Manually disconnected', 'info');
94+
}
95+
}
96+
97+
function sendMessage() {
98+
const message = messageInput.value.trim();
99+
100+
if (!message) {
101+
addMessage('Cannot send empty message', 'error');
102+
return;
103+
}
104+
105+
if (!socket || !socket.connected) {
106+
addMessage('Not connected to server', 'error');
107+
return;
108+
}
109+
110+
// Send message with 'message' event
111+
socket.emit('message', message);
112+
addMessage(`Sent: ${message}`, 'sent');
113+
messageInput.value = '';
114+
}
115+
116+
// Allow sending message with Enter key
117+
messageInput.addEventListener('keypress', (e) => {
118+
if (e.key === 'Enter') {
119+
sendMessage();
120+
}
121+
});
122+
123+
// Initial message
124+
addMessage('Enter server URL and click Connect to start', 'info');
125+
</script>
126+
</body>
127+
</html>

0 commit comments

Comments
 (0)