-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsonglocator-api.js
122 lines (110 loc) · 3.44 KB
/
songlocator-api.js
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//@ sourceMappingURL=songlocator-api.map
// Generated by CoffeeScript 1.6.1
var ResolverSet, Server, parseArguments, readConfigSync, v4, _ref,
__slice = [].slice;
Server = require('ws').Server;
v4 = require('node-uuid').v4;
ResolverSet = require('songlocator-base').ResolverSet;
_ref = require('songlocator-cli'), readConfigSync = _ref.readConfigSync, parseArguments = _ref.parseArguments;
exports.SongLocatorServer = (function() {
function SongLocatorServer(config) {
this.config = config;
this.server = void 0;
}
SongLocatorServer.prototype.log = function() {
var args;
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
return console.log.apply(console, args);
};
SongLocatorServer.prototype.debug = function() {
var args;
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
if (this.config.debug != null) {
return this.log.apply(this, args);
}
};
SongLocatorServer.prototype.serve = function() {
var _this = this;
this.server = new Server({
port: this.config.port || 3000
});
this.server.on('connection', function(sock) {
var cfg, name, r, resolver, resolverCls, resolvers, send;
_this.debug('got new connection');
send = function(msg) {
try {
_this.debug('response', {
qid: msg.qid,
length: msg.results.length
});
return sock.send(JSON.stringify(msg));
} catch (e) {
return _this.debug("error while sending message: " + e);
}
};
resolvers = (function() {
var _ref1, _results;
_ref1 = this.config.resolvers;
_results = [];
for (name in _ref1) {
cfg = _ref1[name];
resolverCls = (require("songlocator-" + name)).Resolver;
_results.push(new resolverCls(cfg));
}
return _results;
}).call(_this);
_this.debug("initialized resolvers: " + (((function() {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = resolvers.length; _i < _len; _i++) {
r = resolvers[_i];
_results.push(r.name);
}
return _results;
})()).join(', ')));
resolver = new ResolverSet(resolvers);
resolver.on('results', send);
return sock.on('message', function(message) {
var qid, req;
req = (function() {
try {
return JSON.parse(message);
} catch (e) {
return void 0;
}
})();
if (!req) {
return;
}
qid = req.qid || v4();
_this.debug('request', req);
if (req.method === 'search' && req.query) {
return resolver.search(qid, req.query);
} else if (req.method === 'resolve' && req.title) {
return resolver.resolve(qid, req.title, req.artist, req.album);
}
});
});
return this.log("start listening on localhost:" + this.config.port);
};
return SongLocatorServer;
})();
exports.main = function(port) {
var config, opts, resolverName, server, _i, _len, _ref1;
if (port == null) {
port = 3000;
}
opts = parseArguments().opts;
config = readConfigSync(opts.config) || {};
_ref1 = opts.resolvers;
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
resolverName = _ref1[_i];
config[resolverName] = {};
}
server = new exports.SongLocatorServer({
debug: opts.debug,
port: port,
resolvers: config
});
return server.serve();
};