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;