fixed worker issues
/ test (push) Successful in 5s Details

This commit is contained in:
Leon van Kammen 2024-10-18 11:50:56 +00:00
parent 2105120819
commit e5a24bbb66
8 changed files with 42 additions and 22 deletions

View File

@ -4,6 +4,8 @@ AFRAME.registerComponent('codemirror', {
schema: { schema: {
file: { type:"string"}, file: { type:"string"},
term: { type:"selector", default: "[isoterminal]" }, term: { type:"selector", default: "[isoterminal]" },
width: { type:"number", default:900},
height: { type:"number", default:700},
}, },
init: function () { init: function () {
@ -32,8 +34,9 @@ AFRAME.registerComponent('codemirror', {
html: (me) => `<div class="codemirror"> html: (me) => `<div class="codemirror">
</div>`, </div>`,
css: (me) => `.codemirror{ css: (me) => `.CodeMirror{
width:100%; width: ${me.com.data.width}px !important;
height: ${me.com.data.height}px !important;
} }
.codemirror *{ .codemirror *{
font-size: 14px; font-size: 14px;
@ -42,7 +45,8 @@ AFRAME.registerComponent('codemirror', {
letter-spacing: 0 !important; letter-spacing: 0 !important;
text-shadow: 0px 0px 10px #F075; text-shadow: 0px 0px 10px #F075;
} }
.wb-body + .codemirror{ overflow:hidden; } #${me.dom.id} .wb-body { overflow:hidden; }
.CodeMirror { .CodeMirror {
margin-top:18px; margin-top:18px;
} }
@ -53,7 +57,7 @@ AFRAME.registerComponent('codemirror', {
}, },
createEditor: function(value){ createEditor: function(value){
this.el.setAttribute("window", `title: codemirror; uid: ${this.el.dom.id}; attach: #overlay; dom: #${this.el.dom.id};`) this.el.setAttribute("window", `title: codemirror; uid: ${this.el.dom.id}; attach: #overlay; dom: #${this.el.dom.id}; width: ${this.data.width}px; height: ${this.data.height}px`)
this.editor = CodeMirror( this.el.dom, { this.editor = CodeMirror( this.el.dom, {
value, value,
mode: "htmlmixed", mode: "htmlmixed",
@ -67,10 +71,9 @@ AFRAME.registerComponent('codemirror', {
} }
}) })
this.editor.setOption("theme", "shadowfox") this.editor.setOption("theme", "shadowfox")
this.editor.updateFile = AFRAME.utils.throttleLeadingAndTrailing( (file,str) => { this.editor.updateFile = AFRAME.utils.throttle( (file,str) => {
this.updateFile(file,str), this.updateFile(file,str)
2000 }, 1500)
})
this.editor.on('change', (instance,changeObj) => { this.editor.on('change', (instance,changeObj) => {
this.editor.updateFile( this.data.file, instance.getValue() ) this.editor.updateFile( this.data.file, instance.getValue() )
}) })
@ -84,7 +87,8 @@ AFRAME.registerComponent('codemirror', {
// we don't do via shellcmd: isoterminal.exec(`echo '${str}' > ${file}`,1) // we don't do via shellcmd: isoterminal.exec(`echo '${str}' > ${file}`,1)
// as it would require all kindof ugly stringescaping // as it would require all kindof ugly stringescaping
console.log("updating "+file) console.log("updating "+file)
await this.isoterminal.worker['emulator.create_file'](file, term.convert.toUint8Array(str) ) console.log(str)
await this.isoterminal.worker['emulator.update_file'](file, term.convert.toUint8Array(str) )
}, },
events:{ events:{

View File

@ -5,14 +5,14 @@
* exit-AR * exit-AR
* com/dom com/window domrenderer exit-VR * com/dom com/window domrenderer exit-VR
* *
* renderer=dom *
* xterm.js * xterm.js
* com/isoterminal com/xterm.js com/html-as-texture-in-XR.js * com/isoterminal com/xterm.js com/html-as-texture-in-XR.js
* xterm.css * xterm.css
* *
* plane textcanvas enter-VR * plane textcanvas enter-VR
* renderer=canvas enter-AR * enter-AR
* * renderer=canvas
* *
* ISOTerminal.js * ISOTerminal.js
* *

View File

@ -13,6 +13,8 @@ emulator.fs9p.update_file = async function(file,data){
const inode = this.GetInode(p.id); const inode = this.GetInode(p.id);
const buf = typeof data == 'string' ? convert.toUint8Array(data) : data || "" const buf = typeof data == 'string' ? convert.toUint8Array(data) : data || ""
if( buf.length == 0 ) return new Promise( (resolve,reject) => resolve(data) )
try{ try{
await this.Write(p.id,0, buf.length, buf ) await this.Write(p.id,0, buf.length, buf )
// update inode // update inode
@ -48,5 +50,3 @@ emulator.fs9p.append_file = async function(file,data){
} }
this['fs9p.append_file'] = function(){ emulator.fs9p.append_file.apply(emulator.fs9p, arguments[0]) }
this['fs9p.update_file'] = function(){ emulator.fs9p.update_file.apply(emulator.fs9p, arguments[0]) }

View File

@ -34,7 +34,10 @@ if( typeof emulator != 'undefined' ){
this.addEventListener('state_restored', function(){ this.addEventListener('state_restored', function(){
// simulate / fastforward boot events // simulate / fastforward boot events
this.postBoot( () => this.send("l\n") ) this.postBoot( () => {
this.send("l\n")
this.send("hook wakeup\n")
})
}) })
this.worker.postMessage({event:'emulator.restore_state',data:state}) this.worker.postMessage({event:'emulator.restore_state',data:state})

View File

@ -20,10 +20,20 @@ if( typeof emulator != 'undefined' ){
}else{ }else{
// inside browser-thread // inside browser-thread
ISOTerminal.addEventListener('javascript-eval', function(e){ ISOTerminal.addEventListener('javascript-eval', async function(e){
const {script,PID} = e.detail const {script,PID} = e.detail
let res = (new Function(`${script}`))() let res
if( res && typeof res != 'string' ) res = JSON.stringify(res,null,2) try{
res = (new Function(`${script}`))()
if( res && typeof res != 'string' ) res = JSON.stringify(res,null,2)
}catch(e){
console.error(e)
console.info(script)
res = "error: "+e.toString()
if( e.filename ){
res += "\n"+e.filename+":"+e.lineno+":"+e.colno
}
}
// update output to 9p with PID as filename (in /mnt/run) // update output to 9p with PID as filename (in /mnt/run)
this.emit('fs9p.update_file', [`run/${PID}`, this.convert.toUint8Array(res)] ) this.emit('fs9p.update_file', [`run/${PID}`, this.convert.toUint8Array(res)] )
}) })

View File

@ -34,7 +34,7 @@ ISOTerminal.addEventListener('emulator-started', function(){
str.trim().split("\n").map( (line) => { str.trim().split("\n").map( (line) => {
finalStr += '\x1b[38;5;165m/dev/browser: \x1b[0m'+prefix+line+'\n' finalStr += '\x1b[38;5;165m/dev/browser: \x1b[0m'+prefix+line+'\n'
}) })
this.emit('fs9p.append_file', ["/dev/browser/console",finalStr]) this.emit('append_file', ["/dev/browser/console",finalStr])
}) })
window.addEventListener('error', function(event) { window.addEventListener('error', function(event) {

View File

@ -44,6 +44,8 @@ this.runISO = function(opts){
*/ */
this['emulator.create_file'] = async function(){ return emulator.create_file.apply(emulator, arguments[0]) } this['emulator.create_file'] = async function(){ return emulator.create_file.apply(emulator, arguments[0]) }
this['emulator.read_file'] = async function(){ return emulator.read_file.apply(emulator, arguments[0]) } this['emulator.read_file'] = async function(){ return emulator.read_file.apply(emulator, arguments[0]) }
this['emulator.append_file'] = async function(){ emulator.fs9p.append_file.apply(emulator.fs9p, arguments[0]) }
this['emulator.update_file'] = async function(){ emulator.fs9p.update_file.apply(emulator.fs9p, arguments[0]) }
// filename will be read from 9pfs: "/mnt/"+filename // filename will be read from 9pfs: "/mnt/"+filename
emulator.readFromPipe = function(filename,cb){ emulator.readFromPipe = function(filename,cb){
@ -62,9 +64,9 @@ this.runISO = function(opts){
* forward events/functions so non-worker world can reach them * forward events/functions so non-worker world can reach them
*/ */
this['serial0-input'] = function(c){ this.emulator.bus.send( 'serial0-input', c) } // to /dev/ttyS0 this['serial0-input'] = function(c){ emulator.bus.send( 'serial0-input', c) } // to /dev/ttyS0
this['serial1-input'] = function(c){ this.emulator.bus.send( 'serial1-input', c) } // to /dev/ttyS1 this['serial1-input'] = function(c){ emulator.bus.send( 'serial1-input', c) } // to /dev/ttyS1
this['serial2-input'] = function(c){ this.emulator.bus.send( 'serial2-input', c) } // to /dev/ttyS2 this['serial2-input'] = function(c){ emulator.bus.send( 'serial2-input', c) } // to /dev/ttyS2
this.onmessage = async function(e){ this.onmessage = async function(e){
let {event,data} = e.data let {event,data} = e.data

View File

@ -156,6 +156,7 @@ AFRAME.registerComponent('xterm', {
disableStdin: false, disableStdin: false,
rows: this.data.rows, rows: this.data.rows,
cols: this.data.cols, cols: this.data.cols,
fontFamily: 'Cousine, monospace',
fontSize: this.fontSize, fontSize: this.fontSize,
lineHeight: 1.15, lineHeight: 1.15,
useFlowControl: true, useFlowControl: true,