UNPKG

2.13 kBJavaScriptView Raw
1import { deviceInfo, } from '@casual-simulation/causal-trees';
2import { fromEventPattern } from 'rxjs';
3import { map, shareReplay, flatMap, first, tap } from 'rxjs/operators';
4export class SocketIOConnectionServer {
5 get connection() {
6 return this._connection;
7 }
8 constructor(socketServer) {
9 // socketServer.on('connection', socket => {
10 // let listener = (token: DeviceToken) => {
11 // console.log(`[SocketIOConnectionServer] On Login!`);
12 // const info = deviceInfo(token.username, token.username, token.id);
13 // const conn = new SocketIOConnection(socket, info);
14 // socket.off('login', listener);
15 // socket.emi
16 // this._connection.next(conn);
17 // };
18 // socket.on('login', listener);
19 // });
20 const onConnection = fromEventPattern(h => socketServer.on('connection', h));
21 const connections = onConnection.pipe(flatMap(s => this._login(s), (socket, info) => ({ info, socket })), map(({ info, socket }) => new SocketIOConnection(socket, info)), shareReplay());
22 this._connection = connections;
23 }
24 _login(socket) {
25 console.log(`[SocketIOConnectionServer] Waiting for login...`);
26 const onLogin = fromEventPattern(h => socket.on('login', h), h => socket.off('login', h));
27 return onLogin.pipe(tap(() => { }), map(token => deviceInfo(token.username, token.username, token.id)), tap(info => socket.emit('login_result', info)), first());
28 }
29}
30export class SocketIOConnection {
31 get device() {
32 return this._device;
33 }
34 get disconnect() {
35 return this._socketEvent('disconnect');
36 }
37 event(name) {
38 return this._socketEvent(name);
39 }
40 send(name, data) {
41 this._socket.emit(name, data);
42 }
43 constructor(socket, device) {
44 this._socket = socket;
45 this._device = device;
46 }
47 _socketEvent(name) {
48 return fromEventPattern(h => this._socket.on(name, h), h => this._socket.off(name, h));
49 }
50}
51//# sourceMappingURL=SocketIOConnectionServer.js.map
\No newline at end of file