UNPKG

pixelstream-cn

Version:

基于虚幻引擎的像素流平台

94 lines (90 loc) 2.6 kB
const WebSocket = window.WebSocket || window.MozWebSocket import StringEncodeDecode from "./../util/stringEncodeDecode.js"; export default class wsocket{ constructor(){ this.ws=null; this.timeInvate=null; } setEncodeKey(key){ this.encodedecode = new StringEncodeDecode(key); return this; } setHost(host){ this.host=host; return this; } setMessageConfig(fn){ this.messageConfigHandel = fn; } //sdp answer消息 setMessageAnswer(fn){ this.messageAnswerHandel = fn; } setMessageIceCandidate(fn){ this.messageIceCandidateHandel = fn; } setMessageError(fn){ this.messageErrorHandel=fn; } setMessageWait(fn){ this.messageWaitHandel=fn; } message(msg){ switch (msg.type) { case 'config': this.messageConfigHandel(msg); break case 'answer': this.messageAnswerHandel(msg); break case 'iceCandidate': this.messageIceCandidateHandel(msg); break case "error": this.messageErrorHandel(msg.message); break; case "wait": this.messageWaitHandel(msg.num) break; } } run(){ let _this=this; this.ws = new WebSocket(this.host) this.ws.onopen = ()=>{ _this.send({ type: 'ready', }) _this.timeInvate = setInterval(() => { _this.send({ type: 'ping', }) }, 50000) } this.ws.onmessage = (event) => { var msg = JSON.parse(_this.encodedecode.decode(event.data)) _this.message(msg); } this.ws.onclose = (event) => { if (_this.timeInvate) { clearInterval(_this.timeInvate) _this.timeInvate=null; } } } send(data){ if(this.ws && this.ws.readyState == WebSocket.OPEN){ this.ws.send(this.encodedecode.encode(JSON.stringify(data))); } } close(){ if(this.timeInvate){ clearInterval(this.timeInvate); this.timeInvate=null; } if(this.ws && this.ws.readyState != WebSocket.CLOSING && this.ws.readyState != WebSocket.CLOSED){ this.ws.close(); } this.ws=null; } }