mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-01-23 10:35:44 +00:00
51 lines
1.2 KiB
JavaScript
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
|
|
}
|