This commit is contained in:
yumoqing 2025-02-06 16:44:10 +08:00
parent faca3f338d
commit 688e751091

View File

@ -6,17 +6,25 @@ bricks.Wterm = class extends bricks.JsWidget {
/*
{
ws_url:
ping_timeout:19
}
*/
constructor(opts){
super(opts);
this.socket = null;
this.ping_timeout = opts.ping_timeout || 19;
schedule_once(this.open.bind(this), 0.5);
}
charsize_sizing(){
var cs = bricks.app.charsize;
this.term.setOption('fontSize', cs);
}
heartbeat(){
if (this.socket.readyState != 1) return;
this.socket.send('_#_heartbeat_#_');
this.heartbeat_task = schedule_once(this.heartbeat.bind(this),
this.ping_timeout);
}
async open(){
var term_options = this.term_options || {};
var term = new Terminal(term_options);
@ -30,14 +38,25 @@ bricks.Wterm = class extends bricks.JsWidget {
this.fitAddon.fit();
this.charsize_sizing();
this.bind('resize', this.term_resize.bind(this))
ws.onmessage = msg => {
term.write(JSON.parse(msg.data).data);
ws.onmessage = event => {
var msg = JSON.parse(event.data);
console.log('ws msg=', msg);
if (msg.data == '_#_heartbeat_#_'){
console.log('connection alive');
} else {
term.write(msg.data);
}
};
ws.onclose = (event) => {
console.log('websocket closed:', event.code, '--', event.reason);
}
ws.onopen = function(){
term.paste('ls -l\n')
if (this.heartbeat_task) {
this.heartbeat_task.cancel();
this.heartbeat_task = null;
}
};
ws.onopen = () => {
this.heartbeat_task = schedule_once(this.heartbeat.bind(this),
this.ping_timeout);
};
term.onData(function(key) {
//Enter