pixelstream-cn
Version:
基于虚幻引擎的像素流平台
94 lines (90 loc) • 2.6 kB
JavaScript
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;
}
}