File size: 2,065 Bytes
5fae594 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
'use strict';
var websocketsId = 0;
/*
* Can you handle the jandal?
*/
var handles = {
stream: {
identify: function streamIdentify (socket) {
return socket.id;
},
write: function streamWrite (socket, message) {
socket.write(message);
},
onread: function streamOnRead (socket, fn) {
socket.on('data', fn);
},
onclose: function streamOnClose (socket, fn) {
socket.on('close', fn);
},
onerror: function streamOnError (socket, fn) {
socket.on('error', fn);
},
onopen: function streamOnOpen (socket, fn) {
setTimeout(fn, 0);
},
release: function streamRelease (socket) {
socket.removeAllListeners('data');
socket.removeAllListeners('close');
socket.removeAllListeners('error');
}
},
websocket: {
identify: function websocketWrite (socket) {
if (socket.hasOwnProperty('id')) return socket.id;
socket.id = ++websocketsId;
return socket.id;
},
write: function websocketWrite (socket, message) {
socket.send(message);
},
onread: function websocketOnRead (socket, fn) {
socket.onmessage = function websocketOnReadOnMessage (e) {
fn(e.data);
};
},
onclose: function websocketOnClose (socket, fn) {
socket.onclose = fn;
},
onerror: function websocketOnError (socket, fn) {
socket.onerror = fn;
},
onopen: function websocketOnOpen (socket, fn) {
socket.onopen = fn;
},
release: function websocketRelease (socket) {
socket.onmessage = undefined;
socket.onclose = undefined;
socket.onopen = undefined;
socket.onerror = undefined;
}
}
};
/*
* Handle
*
* Return a handle
*
* - name (string|object) : the name of the handler, or a custom handler
* > handle
*/
var handle = function handle (name) {
var handler = typeof name === 'object' ? name : handles[name];
if (! handler) {
throw new Error('Jandal handler "' + name + '"could not be found');
}
return handler;
};
module.exports = handle;
|