This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.5 KiB
71 lines
1.5 KiB
|
|
/** |
|
* Accepts any node Stream instance and hijacks its "write()" function, |
|
* so that it can count any newlines that get written to the output. |
|
* |
|
* When a '\n' byte is encountered, then a "newline" event will be emitted |
|
* on the stream, with no arguments. It is up to the listeners to determine |
|
* any necessary deltas required for their use-case. |
|
* |
|
* Ex: |
|
* |
|
* var cursor = ansi(process.stdout) |
|
* , ln = 0 |
|
* process.stdout.on('newline', function () { |
|
* ln++ |
|
* }) |
|
*/ |
|
|
|
/** |
|
* Module dependencies. |
|
*/ |
|
|
|
var assert = require('assert') |
|
var NEWLINE = '\n'.charCodeAt(0) |
|
|
|
function emitNewlineEvents (stream) { |
|
if (stream._emittingNewlines) { |
|
// already emitting newline events |
|
return |
|
} |
|
|
|
var write = stream.write |
|
|
|
stream.write = function (data) { |
|
// first write the data |
|
var rtn = write.apply(stream, arguments) |
|
|
|
if (stream.listeners('newline').length > 0) { |
|
var len = data.length |
|
, i = 0 |
|
// now try to calculate any deltas |
|
if (typeof data == 'string') { |
|
for (; i<len; i++) { |
|
processByte(stream, data.charCodeAt(i)) |
|
} |
|
} else { |
|
// buffer |
|
for (; i<len; i++) { |
|
processByte(stream, data[i]) |
|
} |
|
} |
|
} |
|
|
|
return rtn |
|
} |
|
|
|
stream._emittingNewlines = true |
|
} |
|
module.exports = emitNewlineEvents |
|
|
|
|
|
/** |
|
* Processes an individual byte being written to a stream |
|
*/ |
|
|
|
function processByte (stream, b) { |
|
assert.equal(typeof b, 'number') |
|
if (b === NEWLINE) { |
|
stream.emit('newline') |
|
} |
|
}
|
|
|