2017-08-22 00:10:52 +02:00
|
|
|
import { dispatch } from './store';
|
|
|
|
import { subscribe } from './actions/subscribe';
|
|
|
|
|
|
|
|
let ws;
|
|
|
|
let serial = 0;
|
|
|
|
let transactions = {};
|
|
|
|
|
|
|
|
export default function ws_send(type, body, callback = null) {
|
|
|
|
const _serial = serial++;
|
|
|
|
if (callback) {
|
|
|
|
transactions[_serial] = callback;
|
|
|
|
}
|
2017-08-25 03:13:01 +02:00
|
|
|
const obj = {
|
2017-08-22 00:10:52 +02:00
|
|
|
type,
|
|
|
|
serial: _serial,
|
|
|
|
...body
|
2017-08-25 03:13:01 +02:00
|
|
|
};
|
|
|
|
const msg = JSON.stringify(obj);
|
2017-08-25 03:46:55 +02:00
|
|
|
console.log("->", type, obj);
|
2017-08-22 00:10:52 +02:00
|
|
|
ws.send(msg);
|
|
|
|
return _serial;
|
|
|
|
}
|
|
|
|
|
|
|
|
const handlers = {
|
|
|
|
RESOURCES_EXTANT: msg => dispatch(subscribe(...msg.ids)),
|
|
|
|
UPDATE_RESOURCES: msg => dispatch(msg)
|
|
|
|
};
|
|
|
|
|
|
|
|
function ws_recv(e) {
|
|
|
|
const msg = JSON.parse(e.data);
|
2017-08-25 03:46:55 +02:00
|
|
|
console.log("<-", msg.type, msg);
|
2017-08-22 00:10:52 +02:00
|
|
|
const cb = transactions[msg.serial];
|
|
|
|
cb && cb(msg);
|
|
|
|
const handler = handlers[msg.type];
|
|
|
|
handler && handler(msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function ws_init(cb) {
|
|
|
|
ws = new WebSocket("ws://127.0.0.1:8412");
|
|
|
|
ws.addEventListener("open", cb);
|
|
|
|
ws.addEventListener("message", ws_recv);
|
2017-08-24 14:30:22 +02:00
|
|
|
ws.addEventListener("close", () => console.log("ws closed"));
|
2017-08-22 00:10:52 +02:00
|
|
|
}
|