63 lines
1.6 KiB
JavaScript
Executable File
63 lines
1.6 KiB
JavaScript
Executable File
const cbor = require('borc');
|
|
const assert = require('assert');
|
|
// Create WebSocket connection.
|
|
const ws = new WebSocket('ws://localhost:40000');
|
|
ws.binaryType = 'arraybuffer';
|
|
|
|
// handle user auth within the socket itself
|
|
// https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html
|
|
let user = null;
|
|
|
|
function user_login(res) {
|
|
[struct, created] = res;
|
|
|
|
user = created;
|
|
|
|
console.log(created);
|
|
return send({ method: 'cryp_spawn', params: { level: 64 }});
|
|
}
|
|
|
|
function new_cryp(cryp) {
|
|
console.log('got a new cryp');
|
|
}
|
|
|
|
const handlers = {
|
|
'cryp_spawn': new_cryp,
|
|
'user_login': user_login,
|
|
'user_create': user_login,
|
|
};
|
|
|
|
function receive(res) {
|
|
if (res.err) return console.error(res.err);
|
|
const { method, params } = res;
|
|
return handlers[method](params);
|
|
}
|
|
|
|
function send(msg) {
|
|
msg.token = user && user.token;
|
|
ws.send(cbor.encode(msg));
|
|
}
|
|
|
|
// Connection opened
|
|
ws.addEventListener('open', function (event) {
|
|
send({ method: 'user_login', params: { name: 'somebodyelse', password: 'grepgrepgrep' }});
|
|
});
|
|
|
|
// Listen for messages
|
|
ws.addEventListener('message', function (event) {
|
|
console.log('Message from server ', event.data);
|
|
const blob = new Uint8Array(event.data);
|
|
const decoded = cbor.decode(blob);
|
|
console.log(decoded);
|
|
return receive(decoded);
|
|
});
|
|
|
|
ws.addEventListener('error', function (event) {
|
|
console.error('WebSocket error', event);
|
|
user = null;
|
|
});
|
|
|
|
ws.addEventListener('close', function (event) {
|
|
console.error('WebSocket closed', event);
|
|
user = null;
|
|
}); |