Skip to content

Commit

Permalink
move to offscreencanvas for worker
Browse files Browse the repository at this point in the history
also temp fix of worker till epoxy is fixed
  • Loading branch information
ayunami2000 committed Dec 24, 2024
1 parent 098be9b commit 5b7b9db
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 46 deletions.
34 changes: 16 additions & 18 deletions src/1.8.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ export class EaglerProxy {
);
} else {
fakelogin.writeString(this.offlineUsername);
fakelogin.writeBytes(offlineUUID(username));
fakelogin.writeBytes(offlineUUID(this.offlineUsername));
}
await this.eagler.write(fakelogin);
return;
Expand Down Expand Up @@ -285,28 +285,26 @@ export class EaglerProxy {
else if (body.description.extra) {
response.data.motd = [chatToLegacyString(body.description)];
} else response.data.motd = [body.description.text];

if (body.favicon) {
response.data.icon = true;
let image = new Image();
image.onload = () => {
let canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
let ctx = canvas.getContext("2d")!;
ctx.drawImage(image, 0, 0);
let pixels = ctx.getImageData(
0,
0,
canvas.width,
canvas.height,
).data;
this.eagler.write(new Buffer(new Uint8Array(pixels)));
};
image.src = body.favicon;
}

await this.eagler.write(JSON.stringify(response));

if (body.favicon) {
let image = await createImageBitmap(await (await fetch(body.favicon)).blob());
let canvas = new OffscreenCanvas(image.width, image.height);
let ctx = canvas.getContext("2d")!;
ctx.drawImage(image, 0, 0);
let pixels = ctx.getImageData(
0,
0,
canvas.width,
canvas.height,
).data;
this.eagler.write(new Buffer(new Uint8Array(pixels)));
}
break;
case Clientbound.PongResponse:
let time = packet.readLong();
Expand Down
16 changes: 6 additions & 10 deletions src/connection/fakewebsocket.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Buffer } from "../buffer";
import { showUI } from "../ui";
// @ts-ignore typescript sucks
import wispcraft from "./wispcraft.png";
import DataWorker from "./loader";
// import DataWorker from "./loader";

class WispWS extends EventTarget {
url: string;
Expand All @@ -17,7 +17,8 @@ class WispWS extends EventTarget {
super();

this.url = uri;
this.worker = new Worker("data:text/javascript;base64," + DataWorker);
// this.worker = new Worker("data:text/javascript;base64," + DataWorker);
this.worker = new Worker("worker.js");

this.readyState = WebSocket.CONNECTING;
this.worker.onmessage = async ({ data }) => {
Expand Down Expand Up @@ -82,7 +83,6 @@ class WispWS extends EventTarget {
this.readyState = WebSocket.CLOSING;
try {
this.worker.postMessage({ close: true });
// terminate too?
} catch (err) {}
this.readyState = WebSocket.CLOSED;
}
Expand Down Expand Up @@ -119,19 +119,15 @@ class SettingsWS extends EventTarget {
}),
}),
);
let image = new Image();
image.src = wispcraft;
image.onload = () => {
let canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
fetch(wispcraft).then((response) => response.blob()).then((blob) => createImageBitmap(blob)).then((image) => {
let canvas = new OffscreenCanvas(image.width, image.height);
let ctx = canvas.getContext("2d")!;
ctx.drawImage(image, 0, 0);
let pixels = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
this.dispatchEvent(
new MessageEvent("message", { data: new Uint8Array(pixels) }),
);
};
});
} else {
showUI();
let str = "Settings UI launched.";
Expand Down
23 changes: 7 additions & 16 deletions src/skins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,8 @@ async function funnyFetch(url: string): Promise<Tex> {
}

function makeImageData(width: number, height: number): ImageData {
const canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
return (canvas.getContext("2d") as CanvasRenderingContext2D).getImageData(
const canvas = new OffscreenCanvas(width, height);
return canvas.getContext("2d")!.getImageData(
0,
0,
width,
Expand All @@ -103,18 +101,11 @@ function makeImageData(width: number, height: number): ImageData {
}

async function blobToImageData(blob: Blob): Promise<ImageData> {
return await new Promise((r) => {
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d") as CanvasRenderingContext2D;
const image = new Image();
image.onload = function () {
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
r(ctx.getImageData(0, 0, canvas.width, canvas.height));
};
image.src = URL.createObjectURL(blob);
});
const image = await createImageBitmap(blob);
const canvas = new OffscreenCanvas(image.width, image.height);
const ctx = canvas.getContext("2d")!;
ctx.drawImage(image, 0, 0);
return ctx.getImageData(0, 0, canvas.width, canvas.height);
}

function copyRawPixels(
Expand Down
4 changes: 2 additions & 2 deletions src/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ self.onmessage = ({ data }) => {
return;
}
if (data.close) {
conn.eaglerIn.close();
conn.eaglerOut.cancel();
self.close();
return;
}

console.log(data);
conn = new Connection(data.uri, data.wisp, data.authstore);
conn.forward(() => {
self.postMessage(
Expand Down

0 comments on commit 5b7b9db

Please sign in to comment.