mirror of
https://github.com/mclueppers/xo-server.git
synced 2025-07-25 23:14:56 +02:00
Various updates.
This commit is contained in:
parent
d01d89767a
commit
c140216fc3
@ -16,9 +16,10 @@
|
|||||||
"extendable": ">=0.0.3",
|
"extendable": ">=0.0.3",
|
||||||
"hashy": ">=0.1.0",
|
"hashy": ">=0.1.0",
|
||||||
"q": ">=0.9.6",
|
"q": ">=0.9.6",
|
||||||
"socket.io": ">=0.9.16",
|
"sync": ">=0.2.2",
|
||||||
"underscore": ">=1.4.4",
|
"underscore": ">=1.4.4",
|
||||||
"validator": ">=1.2.1",
|
"validator": ">=1.2.1",
|
||||||
|
"ws": ">=0.4.27",
|
||||||
"xmlrpc": ">=1.1.0"
|
"xmlrpc": ">=1.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {},
|
"devDependencies": {},
|
||||||
|
33
src/main.js
33
src/main.js
@ -80,25 +80,24 @@ function json_api_call(session, message)
|
|||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// @todo Port should be configurable.
|
// @todo Port should be configurable.
|
||||||
require('socket.io').listen(8080, {'log level': 0}).sockets
|
new (require('ws').Server)({'port': 8080}).on('connection', function (socket) {
|
||||||
.on('connection', function (socket) {
|
var session = new Session(xo);
|
||||||
var session = new Session(xo);
|
session.once('close', function () {
|
||||||
session.once('close', function () {
|
socket.close();
|
||||||
socket.disconnect();
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('message', function (request) {
|
|
||||||
json_api_call(session, request).then(function (response) {
|
|
||||||
socket.send(response);
|
|
||||||
}).done();
|
|
||||||
});
|
|
||||||
|
|
||||||
// @todo Ugly inter dependency.
|
|
||||||
socket.once('disconnect', function () {
|
|
||||||
session.close();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on('message', function (request) {
|
||||||
|
json_api_call(session, request).then(function (response) {
|
||||||
|
socket.send(response);
|
||||||
|
}).done();
|
||||||
|
});
|
||||||
|
|
||||||
|
// @todo Ugly inter dependency.
|
||||||
|
socket.once('close', function () {
|
||||||
|
session.close();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// JSON-RPC over TCP.
|
// JSON-RPC over TCP.
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
148
tests/websocket.js
Normal file
148
tests/websocket.js
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
/* jshint loopfunc:false */
|
||||||
|
|
||||||
|
var assert = require('assert');
|
||||||
|
var sync = require('sync');
|
||||||
|
var WS = require('ws');
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var tests = {
|
||||||
|
|
||||||
|
'Session management': {
|
||||||
|
|
||||||
|
'Password sign in': function () {
|
||||||
|
var conn = this.connect('ws://localhost:8080/');
|
||||||
|
assert(conn('session.signInWithPassword', {
|
||||||
|
'email': 'bob@gmail.com',
|
||||||
|
'password': '123',
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
'Token sign in': function () {
|
||||||
|
assert(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
'Connection close out when token removed': function () {
|
||||||
|
// Connects, signs in (with a password) and creates a token.
|
||||||
|
var conn = this.connect('ws://localhost:8080/');
|
||||||
|
conn('session.signInWithPassword', {
|
||||||
|
'email': 'bob@gmail.com',
|
||||||
|
'password': '123',
|
||||||
|
});
|
||||||
|
var token = conn('token.create');
|
||||||
|
|
||||||
|
// Connects again and uses the token to sign in.
|
||||||
|
var conn2 = this.connect('ws://localhost:8080');
|
||||||
|
conn2('session.signInWithToken', {'token': token});
|
||||||
|
|
||||||
|
// Delete the tokens.
|
||||||
|
conn('token.delete', {'token': token});
|
||||||
|
|
||||||
|
// Checks the second connection is closed.
|
||||||
|
assert.throws(function () {
|
||||||
|
conn2('session.getUserId');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Checks the first connection is still opened.
|
||||||
|
conn('session.getUserId');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var next_id = 0;
|
||||||
|
function call(method, params)
|
||||||
|
{
|
||||||
|
return function (callback)
|
||||||
|
{
|
||||||
|
var request = {
|
||||||
|
'jsonrpc': '2.0',
|
||||||
|
'id': next_id++,
|
||||||
|
'method': method,
|
||||||
|
'params': params || {},
|
||||||
|
};
|
||||||
|
this.send(JSON.stringify(request), function (error) {
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
callback(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.once('message', function (response) {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
response = JSON.parse(response.toString());
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
callback(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.error)
|
||||||
|
{
|
||||||
|
// To help find the problem, the request is included
|
||||||
|
// in the error.
|
||||||
|
var error = response.error;
|
||||||
|
error.request = request;
|
||||||
|
|
||||||
|
callback(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
callback(null, response.result);
|
||||||
|
});
|
||||||
|
}.sync(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
function connect(url)
|
||||||
|
{
|
||||||
|
var socket;
|
||||||
|
|
||||||
|
(function (callback)
|
||||||
|
{
|
||||||
|
socket = new WS(url);
|
||||||
|
socket.on('open', function () {
|
||||||
|
callback(null, socket);
|
||||||
|
});
|
||||||
|
socket.on('error', function (error) {
|
||||||
|
callback(error);
|
||||||
|
});
|
||||||
|
}).sync();
|
||||||
|
|
||||||
|
var conn = function (method, params) {
|
||||||
|
return call.call(socket, method, params);
|
||||||
|
};
|
||||||
|
return conn;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
sync(function () {
|
||||||
|
for (var category in tests)
|
||||||
|
{
|
||||||
|
console.log(category);
|
||||||
|
console.log('====================');
|
||||||
|
|
||||||
|
for (var test in tests[category])
|
||||||
|
{
|
||||||
|
console.log('- '+ test);
|
||||||
|
|
||||||
|
var f = tests[category][test];
|
||||||
|
try
|
||||||
|
{
|
||||||
|
f.call({
|
||||||
|
'connect': connect,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (error)
|
||||||
|
{
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, function () {
|
||||||
|
process.exit();
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user