bricks/bricks/websocket.js
2025-07-16 14:28:55 +08:00

88 lines
1.5 KiB
JavaScript

var bricks = window.bricks || {}
bricks.WebSocket = class extends bricks.VBox {
/*
options = {
ws_url:
with_session:
}
event:
onopen:
onmessage:
onerror:
onclose:
ontext:
onbase64audio
onbase64video
*/
constructor(opts){
super(opts);
if (opts.with_session){
var session = bricks.app.get_session();
this.ws = new WebSocket(this.ws_url, sessopn);
} else {
this.ws = new WebSocket(this.ws_url);
}
this.ws.onopen = this.on_open.bind(this);
this.ws.onmessage = this.on_message.bind(this);
this.ws.onclose = this.on_close.bind(this);
this.ws.onerror = this.on_error.bind(this);
}
on_open(e){
this.dispatch('onopen');
console.log("open");
}
on_close(e){
this.dispatch('onclose');
console.log("close");
}
on_error(e){
this.dispatch('onerror');
console.log(error);
}
on_message(e){
var d = JSON.parse(e.data);
var eventname = 'on' + d.type;
this.dispatch(eventname, d.data);
}
send_text(text){
var d = {
type: "text",
data: text
}
this.send(d);
}
send_base64_video(b64video){
var d = {
type: "base64video",
data: b64video
}
this.send(d);
}
send_base64_audio(b64audio){
var d = {
type: "base64audio",
data: b64audio
}
this.send(d);
}
send_typedata(type, data){
var d = {
type:type,
data:data
}
return send(d);
}
send(d){
/* d is a object:
{
type:
data:
}
*/
var s = JSON.stringify(d);
this.ws.send(s);
}
}
bricks.Factory.register('WebSocket', bricks.WebSocket);