siesta-lite
Version:
Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers
55 lines (33 loc) • 1.44 kB
text/typescript
import {Base} from "../../../generic/util/Common.js";
import {Channel, Envelop, Message} from "../../../generic/channel/Types.js";
import {ChannelEndPoint} from "../../../generic/channel/ChannelEndPoint.js";
import {parseJsonSafely} from "../../../generic/util/helper/ParseJsonSafely.js";
import {NodeJsLogger} from "../../util/role/NodeJsLogger.js";
type ServerWebSocket = any
export class ServerEndPoint extends ChannelEndPoint(NodeJsLogger(Base)) {
socket : ServerWebSocket
messageListener : (...args) => any
constructor (props : Partial<ServerEndPoint>) {
super(props)
Object.assign(this, props)
if (!this.socket) throw new Error("`socket` attribute is required")
}
doConnect (channel : Channel) : Promise<any> {
this.socket.addListener('message', this.messageListener = this.onRawChannelMessage.bind(this))
return Promise.resolve()
}
doDisconnect () {
this.socket.removeListener('message', this.messageListener)
}
sendMessage (message : Message) {
this.socket.send(message)
}
messageToEnvelop (message : Message) : Envelop | undefined {
const envelop : Envelop = parseJsonSafely(message) as Envelop
if (envelop && envelop.id == null) return undefined
return envelop
}
envelopToMessage (envelop : Envelop) : Message {
return JSON.stringify(envelop)
}
}