You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.2 KiB
75 lines
2.2 KiB
2 years ago
|
import * as config from './config';
|
||
|
import * as storage from './storage';
|
||
|
import * as http_server from './http';
|
||
|
import * as math from './math';
|
||
|
import * as ser from './serializer';
|
||
|
import * as des from './deserializer';
|
||
|
import * as send from './send';
|
||
|
import * as recv from './recv';
|
||
|
|
||
|
import { MESSAGE, EVENT, SESSION, SNS } from './enums';
|
||
|
import { sessions, desks } from './storage';
|
||
|
|
||
|
export function startup() {
|
||
|
Bun.serve({
|
||
|
hostname: config.HOST,
|
||
|
port: config.PORT,
|
||
|
|
||
|
fetch(req, server) {
|
||
|
const url = new URL(req.url);
|
||
|
|
||
|
if (url.pathname == '/ws/') {
|
||
|
const desk_id = url.searchParams.get('deskId') || '0';
|
||
|
const session_id = url.searchParams.get('sessionId') || '0';
|
||
|
|
||
|
if (!(desk_id in desks)) {
|
||
|
const desk = {
|
||
|
id: desk_id,
|
||
|
sn: 0,
|
||
|
events: [],
|
||
|
};
|
||
|
|
||
|
storage.create_desk(desk_id);
|
||
|
desks[desk_id] = desk;
|
||
|
}
|
||
|
|
||
|
server.upgrade(req, {
|
||
|
data: {
|
||
|
desk_id: desk_id,
|
||
|
session_id: session_id,
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
return http_server.route(req);
|
||
|
},
|
||
|
|
||
|
websocket: {
|
||
|
open(ws) {
|
||
|
send.send_init(ws);
|
||
|
},
|
||
|
|
||
|
async message(ws, u8array) {
|
||
|
const dataview = new DataView(u8array.buffer);
|
||
|
const d = des.create(dataview);
|
||
|
await recv.handle_message(ws, d);
|
||
|
},
|
||
|
|
||
|
close(ws, code, message) {
|
||
|
if (ws.data.session_id in sessions) {
|
||
|
console.log(`session ${ws.data.session_id} closed`);
|
||
|
sessions[ws.data.session_id].state = SESSION.CLOSED;
|
||
|
sessions[ws.data.session_id].ws = null;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
error(ws, error) {
|
||
|
close(ws, 1000, error); // Treat error as normal close
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
console.log(`Running on ${config.HOST}:${config.PORT}`)
|
||
|
}
|