1 | 'use strict';
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | var EventEmitter = require('events').EventEmitter;
|
16 |
|
17 | var Parser = module.exports = function Parser() {
|
18 |
|
19 | EventEmitter.call(this);
|
20 | this.buffer = '';
|
21 | return this;
|
22 | };
|
23 |
|
24 |
|
25 | Parser.prototype = Object.create(EventEmitter.prototype);
|
26 |
|
27 | Parser.END = '\r\n';
|
28 | Parser.END_LENGTH = 2;
|
29 |
|
30 | Parser.prototype.receive = function receive(buffer) {
|
31 | this.buffer += buffer.toString('utf8');
|
32 | var index, json;
|
33 |
|
34 |
|
35 | while ((index = this.buffer.indexOf(Parser.END)) > -1) {
|
36 | json = this.buffer.slice(0, index);
|
37 | this.buffer = this.buffer.slice(index + Parser.END_LENGTH);
|
38 | if (json.length > 0) {
|
39 | try {
|
40 | json = JSON.parse(json);
|
41 |
|
42 | if (json.event !== undefined) {
|
43 |
|
44 | this.emit(json.event, json);
|
45 |
|
46 | this.emit('event', json);
|
47 | }
|
48 |
|
49 | else if (json.delete !== undefined) {
|
50 | this.emit('delete', json);
|
51 | }
|
52 |
|
53 | else if (json.friends !== undefined || json.friends_str !== undefined) {
|
54 | this.emit('friends', json);
|
55 | }
|
56 |
|
57 | else {
|
58 | this.emit('data', json);
|
59 | }
|
60 | }
|
61 | catch (error) {
|
62 | error.source = json;
|
63 | this.emit('error', error);
|
64 | }
|
65 | }
|
66 | else {
|
67 |
|
68 | this.emit('ping');
|
69 | }
|
70 | }
|
71 | };
|