馃悕馃悕馃悕
at dev 58 lines 2.3 kB view raw
1const decoder = new TextDecoder(); 2export const defaults = {}; 3const foo = 'acemnorsuvwxz'; 4const bar = 'bdfghijklpqt'; 5const baru = 'bdfhijklt'; 6const barl = 'gjpq'; 7export function instantiate(target, settings = defaults) { 8 m.websocket.connect('diffusion', 'localhost:8765', (event) => { 9 console.log("FOO"); 10 if (typeof event.data === 'string') { 11 console.log(event.data); 12 return; 13 } 14 if (event.data instanceof ArrayBuffer) { 15 const view = new DataView(event.data); 16 // first 4 bytes: N = length of json metadata 17 const jsonLength = view.getUint32(0); 18 // next N bytes: utf-8 json string 19 const jsonBytes = new Uint8Array(event.data, 4, jsonLength); 20 const metadata = JSON.parse(decoder.decode(jsonBytes)); 21 console.log(metadata); 22 const blob = new Blob([new Uint8Array(event.data, 4 + jsonLength)], { type: 'image/png' }); 23 const img = document.createElement('img'); 24 img.src = URL.createObjectURL(blob); 25 document.body.appendChild(img); 26 return; 27 } 28 }); 29 const fragment = document.createDocumentFragment(); 30 const button = document.createElement('button'); 31 const statusDisplay = document.createElement('p'); 32 const input = document.createElement('input'); 33 fragment.appendChild(button); 34 fragment.appendChild(statusDisplay); 35 fragment.appendChild(input); 36 button.innerText = 'Connect to SD API'; 37 button.addEventListener('click', () => m.websocket.connect('diffusion')); 38 statusDisplay.innerText = 'no connection'; 39 m.websocket.onStatusUpdate('diffusion', (status) => { 40 if (status === 'open') { 41 statusDisplay.innerText = 'connected'; 42 } 43 else { 44 statusDisplay.innerText = 'no connection'; 45 } 46 }); 47 m.diffusion.send = m.websocket.sender('diffusion'); 48 input.addEventListener('keydown', (event) => { 49 if (event.key === 'Enter') { 50 m.diffusion.send({ 51 command: input.value 52 }); 53 input.value = ''; 54 } 55 }); 56 fragment.appendChild(document.createElement('br')); 57 target.appendChild(fragment); 58}