-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
50 lines (44 loc) · 1.45 KB
/
index.js
File metadata and controls
50 lines (44 loc) · 1.45 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
const net = require('net');
const http = require('http');
const fs = require('fs');
const Multiplex = require('multiplex');
const websocket = require('websocket-stream');
const rpc = require('rpc-stream');
const httpServer = http.createServer();
const wss = websocket.createServer({server: httpServer}, handleWsClient);
httpServer.listen(process.env.PORT || 4005, function() {
console.log('http server is live');
});
function handleWsClient(websocketStream) {
const servers = {};
const multiplexer = Multiplex();
const streamMoo = multiplexer.createSharedStream('irc-moo');
const rpcServer = rpc({
connect(serverAddress, done) {
if(servers[serverAddress]) {
done({message: `Already connected to sever ${serverAddress}`});
return;
}
const ircServerStream = net.connect({
host: serverAddress,
port: 6667
});
const s = multiplexer.createSharedStream(serverAddress);
ircServerStream.pipe(s).pipe(ircServerStream);
servers[serverAddress] = ircServerStream;
done(null);
},
disconnect(serverAddress, done) {
if(!servers[serverAddress]) {
done({message: `Never connected to server ${serverAddress}`});
return;
}
servers[serverAddress].end();
delete servers[serverAddress];
done(null);
}
});
websocketStream.pipe(multiplexer).pipe(websocketStream);
streamMoo.pipe(rpcServer).pipe(streamMoo);
streamMoo.pipe(process.stdout);
}