Skip to content

Commit

Permalink
add "none" log level
Browse files Browse the repository at this point in the history
  • Loading branch information
bcoburn3 committed Jul 28, 2017
1 parent b6db719 commit bd789bd
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 36 deletions.
35 changes: 24 additions & 11 deletions lib.js
Expand Up @@ -35,6 +35,16 @@ var Transport = require('./transport-websocket.js'),
MooMessage = require('./moomsg.js'),
Core = require('./core.js');

function Logger(log_level) {
this._log_level = log_level;
};

Logger.prototype.log = function() {
if (this._log_level != "none") {
console.log.apply(null, arguments);
}
};

function RoonApi(o) {
this._service_request_handlers = {};

Expand Down Expand Up @@ -78,6 +88,7 @@ function RoonApi(o) {
};
if (o.website) this.extension_reginfo.website = o.website;

this.logger = new Logger(o.log_level);
this.extension_opts = o;
this.is_paired = false;
}
Expand Down Expand Up @@ -173,13 +184,14 @@ if (typeof(window) == "undefined" || typeof(nw) !== "undefined") {
RoonApi.prototype.start_discovery = function() {
if (this._sood) return;
this._sood = require('./sood.js');
this._sood.logger = this.logger;
this._sood_conns = {};
this._sood.on('message', msg => {
// console.log(msg);
// this.logger.log(msg);
if (msg.props.service_id == "00720724-5143-4a9b-abac-0e50cba674bb" && msg.props.unique_id) {
if (this._sood_conns[msg.props.unique_id]) return;
this._sood_conns[msg.props.unique_id] = true;
var trans = new Transport(msg.from.ip, msg.props.http_port, msg.props.tcp_port);
var trans = new Transport(msg.from.ip, msg.props.http_port, msg.props.tcp_port, this.logger);
this.connect(trans, () => {
delete(this._sood_conns[msg.props.unique_id]);
});
Expand Down Expand Up @@ -330,7 +342,7 @@ RoonApi.prototype.register_service = function(svcname, spec) {

RoonApi.prototype.connect = function(transport, cb) {
transport.onopen = () => {
// console.log("OPEN");
// this.logger.log("OPEN");

transport.moo.send_request("com.roonlabs.registry:1/info",
(msg, body) => {
Expand All @@ -347,7 +359,7 @@ RoonApi.prototype.connect = function(transport, cb) {
transport.moo.core = undefined;
}
} else if (msg.name == "Registered") {
transport.moo.core = new Core(transport.moo, this, body);
transport.moo.core = new Core(transport.moo, this, body, this.logger);

let settings = this.get_persisted_state();
if (!settings.tokens) settings.tokens = {};
Expand All @@ -362,7 +374,7 @@ RoonApi.prototype.connect = function(transport, cb) {
};

transport.onclose = () => {
// console.log("CLOSE");
// this.logger.log("CLOSE");
Object.keys(this._service_request_handlers).forEach(e => this._service_request_handlers[e] && this._service_request_handlers[e](null, transport.moo.mooid));
if (transport.moo) transport.moo.close();
transport.moo = undefined;
Expand All @@ -372,28 +384,29 @@ RoonApi.prototype.connect = function(transport, cb) {

/*
transport.onerror = err => {
// console.log("ERROR", err);
// this.logger.log("ERROR", err);
if (transport.moo) transport.moo.close();
transport.moo = undefined;
transport.close();
};*/

transport.onmessage = msg => {
// console.log("GOTMSG");
// this.logger.log("GOTMSG");
var body = msg.body;
delete(msg.body);
var logging = msg.headers["Logging"];
msg.log = (this.extension_opts.log_level == "all") || (logging != "quiet");
msg.log = (this.extension_opts.log_level != "none") &&
((this.extension_opts.log_level == "all") || (logging != "quiet"));
if (msg.verb == "REQUEST") {
if (msg.log) console.log('<-', msg.verb, msg.request_id, msg.service + "/" + msg.name, body ? JSON.stringify(body) : "");
var req = new MooMessage(transport.moo, msg, body);
if (msg.log) this.logger.log('<-', msg.verb, msg.request_id, msg.service + "/" + msg.name, body ? JSON.stringify(body) : "");
var req = new MooMessage(transport.moo, msg, body, this.logger);
var handler = this._service_request_handlers[msg.service];
if (handler)
handler(req, req.moo.mooid);
else
req.send_complete("InvalidRequest", { error: "unknown service: " + msg.service });
} else {
if (msg.log) console.log('<-', msg.verb, msg.request_id, msg.name, body ? JSON.stringify(body) : "");
if (msg.log) this.logger.log('<-', msg.verb, msg.request_id, msg.name, body ? JSON.stringify(body) : "");
transport.moo.handle_response(msg, body);
}
};
Expand Down
15 changes: 8 additions & 7 deletions moo.js
Expand Up @@ -6,6 +6,7 @@ function Moo(transport) {
this.subkey = 0;
this.requests = {};
this.mooid = Moo._counter++;
this.logger = transport.logger;
}

Moo._counter = 0;
Expand Down Expand Up @@ -60,7 +61,7 @@ Moo.prototype.send_request = function() {
'Content-Type: ' + content_type + '\n';
}

console.log('-> REQUEST', this.reqid, name, origbody ? JSON.stringify(origbody) : "");
this.logger.log('-> REQUEST', this.reqid, name, origbody ? JSON.stringify(origbody) : "");
const m = Buffer.from(header + '\n');
if (body)
this.transport.send(Buffer.concat([ m, body ], m.length + body.length));
Expand Down Expand Up @@ -98,7 +99,7 @@ Moo.prototype.parse = function(buf) {
if (s == e) {
// end of MOO header
if (msg.request_id === undefined) {
console.log('MOO: missing Request-Id header: ', msg);
this.logger.log('MOO: missing Request-Id header: ', msg);
return ret;
}
if (msg.content_length > 0) {
Expand All @@ -107,7 +108,7 @@ Moo.prototype.parse = function(buf) {
try {
msg.body = JSON.parse(json);
} catch (e) {
console.log("MOO: bad json body: ", json, msg);
this.logger.log("MOO: bad json body: ", json, msg);
return ret;
}
} else {
Expand All @@ -134,7 +135,7 @@ Moo.prototype.parse = function(buf) {
else
msg.headers[matches[1]] = matches[2];
} else {
console.log("MOO: bad header: ", line, msg);
this.logger.log("MOO: bad header: ", line, msg);
return ret;
}
}
Expand All @@ -150,23 +151,23 @@ Moo.prototype.parse = function(buf) {
msg.service = matches[1];
msg.name = matches[2];
} else {
console.log("MOO: bad request header: ", line, msg);
this.logger.log("MOO: bad request header: ", line, msg);
return ret;
}
} else {
msg.name = matches[3];
}
state = 'header';
} else {
console.log("MOO: bad header: ", line, msg);
this.logger.log("MOO: bad header: ", line, msg);
return ret;
}
}
s = e+1;
}
e++;
}
console.log("ignoring malformed moo msg");
this.logger.log("ignoring malformed moo msg");
return ret;
};

Expand Down
4 changes: 2 additions & 2 deletions moomsg.js
Expand Up @@ -41,7 +41,7 @@ MooMessage.prototype.send_continue = function() {
'Content-Type: ' + content_type + '\n';
}

if (this.msg.log) console.log('-> CONTINUE', this.msg.request_id, name, origbody ? JSON.stringify(origbody) : "");
if (this.msg.log) this.moo.logger.log('-> CONTINUE', this.msg.request_id, name, origbody ? JSON.stringify(origbody) : "");
const m = Buffer.from(header + '\n');
if (body)
this.moo.transport.send(Buffer.concat([ m, body ], m.length + body.length));
Expand Down Expand Up @@ -84,7 +84,7 @@ MooMessage.prototype.send_complete = function() {
'Content-Type: ' + content_type + '\n';
}

if (this.msg.log) console.log('-> COMPLETE', this.msg.request_id, name, origbody ? JSON.stringify(origbody) : "");
if (this.msg.log) this.moo.logger.log('-> COMPLETE', this.msg.request_id, name, origbody ? JSON.stringify(origbody) : "");
const m = Buffer.from(header + '\n');
if (body)
this.moo.transport.send(Buffer.concat([ m, body ], m.length + body.length));
Expand Down
29 changes: 15 additions & 14 deletions sood.js
Expand Up @@ -10,11 +10,12 @@ var util = require("util"),
var SOOD_PORT = 9003;
var SOOD_MULTICAST_IP = "239.255.90.90";

function Sood() {
function Sood(logger) {
this._multicast = {};
this._unicast = {};
this._iface_seq = 0;
// this.on("message", (msg) => { console.log(JSON.stringify(msg)); });
this.logger = logger;
// this.on("message", (msg) => { this.logger.log(JSON.stringify(msg)); });
};

util.inherits(Sood, events.EventEmitter);
Expand Down Expand Up @@ -89,14 +90,14 @@ Sood.prototype.query = function(msg) {

for (var ip in this._multicast) {
if (this._multicast[ip].send_sock) {
// console.log('sending on mcast ' + ip);
// this.logger.log('sending on mcast ' + ip);
this._multicast[ip].send_sock.send(buf, 0, pos, SOOD_PORT, SOOD_MULTICAST_IP);
// console.log('sending on mcast ' + ip + ", bcast " + this._multicast[ip].broadcast);
// this.logger.log('sending on mcast ' + ip + ", bcast " + this._multicast[ip].broadcast);
this._multicast[ip].send_sock.send(buf, 0, pos, SOOD_PORT, this._multicast[ip].broadcast);
}
}
if (this._unicast.send_sock) {
// console.log('sending on unicast');
// this.logger.log('sending on unicast');
this._unicast.send_sock.send(buf, 0, pos, SOOD_PORT, SOOD_MULTICAST_IP);
}
};
Expand All @@ -121,14 +122,14 @@ Sood.prototype.initsocket = function(cb) {

let unicast = this._unicast;
if (!unicast.send_sock) {
// console.log(`SOOD: new sock: unicast`);
// this.logger.log(`SOOD: new sock: unicast`);
unicast.send_sock = dgram.createSocket({ type: 'udp4' });
unicast.send_sock.on('error', (err) => {
// console.log(`server error ${ip}`, err);
// this.logger.log(`server error ${ip}`, err);
unicast.send_sock.close();
});
unicast.send_sock.on('close', () => {
// console.log(`closed unicast on ${ip}`);
// this.logger.log(`closed unicast on ${ip}`);
delete(unicast.send_sock);
});
unicast.send_sock.on('message', (msg, rinfo) => {
Expand Down Expand Up @@ -167,15 +168,15 @@ Sood.prototype._listen_iface = function(ip, netmask, ifacename) {
let new_iface = false;

if (!iface.recv_sock) {
// console.log(`SOOD: new sock: recv ${ip}/${ifacename}`);
// this.logger.log(`SOOD: new sock: recv ${ip}/${ifacename}`);
new_iface = true;
iface.recv_sock = dgram.createSocket({ type: 'udp4', reuseAddr: true });
iface.recv_sock.on('error', (err) => {
// console.log(`server error ${ip}`, err);
// this.logger.log(`server error ${ip}`, err);
iface.recv_sock.close();
});
iface.recv_sock.on('close', () => {
// console.log(`closed multicast on ${ip}`);
// this.logger.log(`closed multicast on ${ip}`);
delete(iface.recv_sock);
});
iface.recv_sock.on('message', (msg, rinfo) => {
Expand All @@ -187,16 +188,16 @@ Sood.prototype._listen_iface = function(ip, netmask, ifacename) {
});
}
if (!iface.send_sock) {
// console.log(`SOOD: new sock: send ${ip}/${ifacename}`);
// this.logger.log(`SOOD: new sock: send ${ip}/${ifacename}`);
new_iface = true;
iface.send_sock = dgram.createSocket({ type: 'udp4' });
iface.broadcast = IP.subnet(ip, netmask).broadcastAddress;
iface.send_sock.on('error', (err) => {
// console.log(`server error ${ip}`, err);
// this.logger.log(`server error ${ip}`, err);
iface.send_sock.close();
});
iface.send_sock.on('close', () => {
// console.log(`closed multicast on ${ip}`);
// this.logger.log(`closed multicast on ${ip}`);
delete(iface.send_sock);
});
iface.send_sock.on('message', (msg, rinfo) => {
Expand Down
5 changes: 3 additions & 2 deletions transport-websocket.js
Expand Up @@ -5,11 +5,12 @@ if (typeof(WebSocket) == "undefined") global.WebSocket = require('ws');

var Moo = require('./moo.js');

function Transport(ip, http_port, tcp_port) {
function Transport(ip, http_port, tcp_port, logger) {
var host = ip + ":" + http_port;
this.ws = new WebSocket('ws://' + host + '/api');
if (typeof(window) != "undefined") this.ws.binaryType = 'arraybuffer';

this.logger = logger;

this.ws.onopen = () => {
this.moo = new Moo(this);
this.onopen();
Expand Down

0 comments on commit bd789bd

Please sign in to comment.