-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathws-tcp-proxy-all.cjs
More file actions
78 lines (61 loc) · 1.9 KB
/
Copy pathws-tcp-proxy-all.cjs
File metadata and controls
78 lines (61 loc) · 1.9 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
* WebSocket-to-TCP Proxy for Director Multiuser Xtra
* Runs both game server and multiuser server proxies
*
* Usage:
* node ws-tcp-proxy-all.js
*
* This creates:
* ws://127.0.0.1:3091 -> tcp://127.0.0.1:3090 (game server)
* ws://127.0.0.1:3081 -> tcp://127.0.0.1:3080 (multiuser server)
*/
const WebSocket = require('ws');
const net = require('net');
function createProxy(wsPort, tcpHost, tcpPort, name) {
const wss = new WebSocket.Server({ port: wsPort });
console.log(`[${name}] WebSocket ws://127.0.0.1:${wsPort} -> TCP ${tcpHost}:${tcpPort}`);
wss.on('connection', (ws, req) => {
const clientIp = req.socket.remoteAddress;
console.log(`[${name}] New WS connection from ${clientIp}`);
const tcp = net.createConnection({ host: tcpHost, port: tcpPort }, () => {
console.log(`[${name}] Connected to TCP ${tcpHost}:${tcpPort}`);
});
tcp.on('data', (data) => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(data);
}
});
tcp.on('close', () => {
console.log(`[${name}] TCP closed`);
ws.close();
});
tcp.on('error', (err) => {
console.error(`[${name}] TCP error: ${err.message}`);
ws.close();
});
ws.on('message', (data) => {
if (tcp.writable) {
tcp.write(data);
}
});
ws.on('close', () => {
console.log(`[${name}] WS closed`);
tcp.end();
});
ws.on('error', (err) => {
console.error(`[${name}] WS error: ${err.message}`);
tcp.end();
});
});
wss.on('error', (err) => {
console.error(`[${name}] Server error: ${err.message}`);
});
return wss;
}
console.log('WebSocket-to-TCP Proxy for Director');
console.log('====================================\n');
// Game server proxy
createProxy(3091, '127.0.0.1', 3090, 'Game');
// Multiuser server proxy
createProxy(3081, '127.0.0.1', 3080, 'Multiuser');
console.log('\nReady for connections!\n');