From 28f256b5b55a1ef1e150163db29106dbcf698dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Mon, 26 Jul 2021 23:29:41 +0200 Subject: [PATCH] move reconnector to own folder. --- src/component/internal/connection.ts | 93 +------------------ .../reconnector/index.ts} | 3 +- src/component/internal/reconnector/webrtc.ts | 49 ++++++++++ .../internal/reconnector/websocket.ts | 51 ++++++++++ 4 files changed, 106 insertions(+), 90 deletions(-) rename src/component/{utils/reconnector.ts => internal/reconnector/index.ts} (98%) create mode 100644 src/component/internal/reconnector/webrtc.ts create mode 100644 src/component/internal/reconnector/websocket.ts diff --git a/src/component/internal/connection.ts b/src/component/internal/connection.ts index ef29c250..2866773a 100644 --- a/src/component/internal/connection.ts +++ b/src/component/internal/connection.ts @@ -5,7 +5,10 @@ import * as EVENT from '../types/events' import { NekoWebSocket } from './websocket' import { NekoWebRTC } from './webrtc' import { Connection, WebRTCStats } from '../types/state' -import { Reconnector, ReconnectorAbstract } from '../utils/reconnector' + +import { Reconnector } from './reconnector' +import { WebsocketReconnector } from './reconnector/websocket' +import { WebrtcReconnector } from './reconnector/webrtc' const WEBRTC_RECONN_MAX_LOSS = 25 const WEBRTC_RECONN_FAILED_ATTEMPTS = 5 @@ -14,94 +17,6 @@ export interface NekoConnectionEvents { disconnect: (error?: Error) => void } -class WebsocketReconnector extends ReconnectorAbstract { - private _state: Connection - private _websocket: NekoWebSocket - - private _onConnectHandle: () => void - private _onDisconnectHandle: (error?: Error) => void - - constructor(state: Connection, websocket: NekoWebSocket) { - super() - - this._state = state - this._websocket = websocket - - this._onConnectHandle = () => this.emit('connect') - this._websocket.on('connected', this._onConnectHandle) - - this._onDisconnectHandle = (error?: Error) => this.emit('disconnect', error) - this._websocket.on('disconnected', this._onDisconnectHandle) - } - - public get connected() { - return this._websocket.connected - } - - public connect() { - let url = this._state.url - url = url.replace(/^http/, 'ws').replace(/\/+$/, '') + '/api/ws' - - const token = this._state.token - if (token) { - url += '?token=' + encodeURIComponent(token) - } - - this._websocket.connect(url) - } - - public disconnect() { - this._websocket.disconnect() - } - - public destroy() { - this._websocket.off('connected', this._onConnectHandle) - this._websocket.off('disconnected', this._onDisconnectHandle) - } -} - -class WebrtcReconnector extends ReconnectorAbstract { - private _state: Connection - private _websocket: NekoWebSocket - private _webrtc: NekoWebRTC - - private _onConnectHandle: () => void - private _onDisconnectHandle: (error?: Error) => void - - constructor(state: Connection, websocket: NekoWebSocket, webrtc: NekoWebRTC) { - super() - - this._state = state - this._websocket = websocket - this._webrtc = webrtc - - this._onConnectHandle = () => this.emit('connect') - this._webrtc.on('connected', this._onConnectHandle) - - this._onDisconnectHandle = (error?: Error) => this.emit('disconnect', error) - this._webrtc.on('disconnected', this._onDisconnectHandle) - } - - public get connected() { - return this._webrtc.connected - } - - public connect() { - if (this._websocket.connected) { - this._websocket.send(EVENT.SIGNAL_REQUEST, { video: this._state.webrtc.video }) - } - } - - public disconnect() { - this._webrtc.disconnect() - } - - public destroy() { - this._webrtc.off('connected', this._onConnectHandle) - this._webrtc.off('disconnected', this._onDisconnectHandle) - } -} - export class NekoConnection extends EventEmitter { private _state: Connection diff --git a/src/component/utils/reconnector.ts b/src/component/internal/reconnector/index.ts similarity index 98% rename from src/component/utils/reconnector.ts rename to src/component/internal/reconnector/index.ts index b74ee414..a725e877 100644 --- a/src/component/utils/reconnector.ts +++ b/src/component/internal/reconnector/index.ts @@ -1,5 +1,6 @@ import EventEmitter from 'eventemitter3' -import { ReconnectorConfig } from '../types/reconnector' + +import { ReconnectorConfig } from '../../types/reconnector' export interface ReconnectorAbstractEvents { connect: () => void diff --git a/src/component/internal/reconnector/webrtc.ts b/src/component/internal/reconnector/webrtc.ts new file mode 100644 index 00000000..5505e5d3 --- /dev/null +++ b/src/component/internal/reconnector/webrtc.ts @@ -0,0 +1,49 @@ +import * as EVENT from '../../types/events' +import { Connection } from '../../types/state' + +import { NekoWebSocket } from '../websocket' +import { NekoWebRTC } from '../webrtc' + +import { ReconnectorAbstract } from '.' + +export class WebrtcReconnector extends ReconnectorAbstract { + private _state: Connection + private _websocket: NekoWebSocket + private _webrtc: NekoWebRTC + + private _onConnectHandle: () => void + private _onDisconnectHandle: (error?: Error) => void + + constructor(state: Connection, websocket: NekoWebSocket, webrtc: NekoWebRTC) { + super() + + this._state = state + this._websocket = websocket + this._webrtc = webrtc + + this._onConnectHandle = () => this.emit('connect') + this._webrtc.on('connected', this._onConnectHandle) + + this._onDisconnectHandle = (error?: Error) => this.emit('disconnect', error) + this._webrtc.on('disconnected', this._onDisconnectHandle) + } + + public get connected() { + return this._webrtc.connected + } + + public connect() { + if (this._websocket.connected) { + this._websocket.send(EVENT.SIGNAL_REQUEST, { video: this._state.webrtc.video }) + } + } + + public disconnect() { + this._webrtc.disconnect() + } + + public destroy() { + this._webrtc.off('connected', this._onConnectHandle) + this._webrtc.off('disconnected', this._onDisconnectHandle) + } +} diff --git a/src/component/internal/reconnector/websocket.ts b/src/component/internal/reconnector/websocket.ts new file mode 100644 index 00000000..238f10d1 --- /dev/null +++ b/src/component/internal/reconnector/websocket.ts @@ -0,0 +1,51 @@ +import { Connection } from '../../types/state' + +import { NekoWebSocket } from '../websocket' + +import { ReconnectorAbstract } from '.' + +export class WebsocketReconnector extends ReconnectorAbstract { + private _state: Connection + private _websocket: NekoWebSocket + + private _onConnectHandle: () => void + private _onDisconnectHandle: (error?: Error) => void + + constructor(state: Connection, websocket: NekoWebSocket) { + super() + + this._state = state + this._websocket = websocket + + this._onConnectHandle = () => this.emit('connect') + this._websocket.on('connected', this._onConnectHandle) + + this._onDisconnectHandle = (error?: Error) => this.emit('disconnect', error) + this._websocket.on('disconnected', this._onDisconnectHandle) + } + + public get connected() { + return this._websocket.connected + } + + public connect() { + let url = this._state.url + url = url.replace(/^http/, 'ws').replace(/\/+$/, '') + '/api/ws' + + const token = this._state.token + if (token) { + url += '?token=' + encodeURIComponent(token) + } + + this._websocket.connect(url) + } + + public disconnect() { + this._websocket.disconnect() + } + + public destroy() { + this._websocket.off('connected', this._onConnectHandle) + this._websocket.off('disconnected', this._onDisconnectHandle) + } +}