cloud-game/web/js/network/socket.js
2024-03-18 13:45:01 +03:00

51 lines
1.2 KiB
JavaScript

import {
pub,
MESSAGE
} from 'event';
import {log} from 'log';
let conn;
const buildUrl = (params = {}) => {
const url = new URL(window.location);
url.protocol = location.protocol !== 'https:' ? 'ws' : 'wss';
url.pathname = "/ws";
Object.keys(params).forEach(k => {
if (!!params[k]) url.searchParams.set(k, params[k])
})
return url
}
const init = (roomId, wid, zone) => {
let objParams = {room_id: roomId, zone: zone};
if (wid) objParams.wid = wid;
const url = buildUrl(objParams)
log.info(`[ws] connecting to ${url}`);
conn = new WebSocket(url.toString());
conn.onopen = () => {
log.info('[ws] <- open connection');
};
conn.onerror = () => log.error('[ws] some error!');
conn.onclose = (event) => log.info(`[ws] closed (${event.code})`);
conn.onmessage = response => {
const data = JSON.parse(response.data);
log.debug('[ws] <- ', data);
pub(MESSAGE, data);
};
};
const send = (data) => {
if (conn.readyState === 1) {
conn.send(JSON.stringify(data));
}
}
/**
* WebSocket connection module.
*
* Needs init() call.
*/
export const socket = {
init,
send
}