refactor: websocket server

This commit is contained in:
cha0s 2024-06-12 23:17:24 -05:00
parent 2ad8d492b5
commit d86e696cd2
8 changed files with 41 additions and 25 deletions

View File

@ -19,6 +19,9 @@ module.exports = {
commonjs: true, commonjs: true,
es6: true, es6: true,
}, },
globals: {
process: false,
},
ignorePatterns: ['!**/.server', '!**/.client'], ignorePatterns: ['!**/.server', '!**/.client'],
// Base config // Base config
@ -52,7 +55,13 @@ module.exports = {
// Node // Node
{ {
files: ['.eslintrc.cjs', 'server.js', 'vite.config.js', 'websocket.js', 'public/assets/tileset.js'], files: [
'app/websocket.js',
'.eslintrc.cjs',
'server.js',
'vite.config.js',
'public/assets/tileset.js',
],
env: { env: {
node: true, node: true,
}, },

View File

@ -11,8 +11,14 @@ import { RemixServer } from "@remix-run/react";
import { isbot } from "isbot"; import { isbot } from "isbot";
import { renderToPipeableStream } from "react-dom/server"; import { renderToPipeableStream } from "react-dom/server";
import websocketServer from './websocket';
const ABORT_DELAY = 5_000; const ABORT_DELAY = 5_000;
export async function websocket(server) {
await websocketServer(server);
}
export default function handleRequest( export default function handleRequest(
request, request,
responseStatusCode, responseStatusCode,

View File

@ -2,7 +2,11 @@ let connected = false;
let socket; let socket;
onmessage = async (event) => { onmessage = async (event) => {
if (!connected) { if (!connected) {
socket = new WebSocket(`wss://${event.data.host}/ws`); const url = new URL(`wss://${event.data.host}/ws`)
if ('production' === process.env.NODE_ENV) {
url.protocol = 'ws:';
}
socket = new WebSocket(url.href);
socket.binaryType = 'arraybuffer'; socket.binaryType = 'arraybuffer';
await new Promise((resolve) => { await new Promise((resolve) => {
socket.onopen = resolve; socket.onopen = resolve;

View File

@ -24,7 +24,11 @@ export default class RemoteClient extends Client {
}; };
} }
else { else {
this.socket = new WebSocket(`wss://${host}/ws`); const url = new URL(`wss://${host}/ws`)
if ('production' === process.env.NODE_ENV) {
url.protocol = 'ws:';
}
this.socket = new WebSocket(url.href);
this.socket.binaryType = 'arraybuffer'; this.socket.binaryType = 'arraybuffer';
this.socket.onmessage = (event) => { this.socket.onmessage = (event) => {
this.accept(event.data); this.accept(event.data);

View File

@ -12,7 +12,8 @@ onmessage = (event) => {
engine.server.accept(undefined, event.data); engine.server.accept(undefined, event.data);
}; };
await engine.load(); (async () => {
engine.start(); await engine.load();
engine.start();
await engine.connectPlayer(undefined); await engine.connectPlayer(undefined);
})();

View File

@ -28,4 +28,4 @@ export default class Action extends Packet {
}; };
} }
}; }

View File

@ -19,7 +19,7 @@ function onUpgrade(request, socket, head) {
} }
} }
export async function listen(server) { export default async function listen(server) {
server.on('upgrade', onUpgrade); server.on('upgrade', onUpgrade);
class SocketServer extends Server { class SocketServer extends Server {

View File

@ -39,25 +39,17 @@ const viteDevServer = isProduction
}) })
); );
const ssr = await (
viteDevServer
? viteDevServer.ssrLoadModule('virtual:remix/server-build')
: import('./build/server/index.js')
);
const remixHandler = createRequestHandler({ const remixHandler = createRequestHandler({
build: () => ( build: () => ssr,
viteDevServer
? viteDevServer.ssrLoadModule('virtual:remix/server-build')
: import('./build/server/index.js')
),
}); });
// WebSocket await ssr.entry.module.websocket(server);
let listen;
if (isProduction) {
({listen} = await import('./websocket.js'));
}
else {
const {createViteRuntime} = await import('vite');
const runtime = await createViteRuntime(viteDevServer);
({listen} = await runtime.executeEntrypoint('/websocket.js'));
}
await listen(server);
app.use(compression()); app.use(compression());