UNPKG

siesta-lite

Version:

Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers

92 lines (59 loc) 2.52 kB
import {Base, Constructable, Mixin} from "../../../generic/util/Common.js"; import {Channel, Envelop, Message} from "../../../generic/channel/Types.js"; import {ChannelEndPoint} from "../../../generic/channel/ChannelEndPoint.js"; import {BrowserLogger} from "../../util/role/BrowserLogger.js"; import {parseJsonSafely} from "../../../generic/util/helper/ParseJsonSafely.js"; export class ChildEndPoint extends ChannelEndPoint(BrowserLogger(Base)) { socket : WebSocket host : string port : number doConnect (channel : Channel) : Promise<any> { return new Promise((resolve, reject) => { var socket // wrapping WebSocket instantiation in try/catch in attempt to hide the connection exception // (if server is not running for example) // does not work unfortunately (seems by current browsers design) try { socket = this.socket = new WebSocket('ws://' + this.host + ':' + this.port) } catch (e) { reject("Connection error") return } socket.addEventListener('open', event => { socket.removeEventListener('close', connectionErrorRejection) socket.addEventListener('close', event => { this.onSocketClose(event) this.disconnect() }) socket.addEventListener('message', event => this.onRawChannelMessage(event)) this.onSocketOpen(event) resolve() }) const connectionErrorRejection = event => reject("Connection error") socket.addEventListener('close', connectionErrorRejection) }) } doDisconnect () { const socket = this.socket if (socket && socket.readyState != socket.CLOSED) { socket.close() this.socket = null } } onSocketOpen (event : object) { } onSocketClose (event : object) { } sendMessage (message : Message) { this.info("Sending message: " + message) this.socket.send(message) } messageToEnvelop (message : Message) : Envelop | undefined { const envelop : Envelop = parseJsonSafely(message.data) as Envelop if (envelop && envelop.id == null) return undefined return envelop } envelopToMessage (envelop : Envelop) : Message { return JSON.stringify(envelop) } }