mirror of
https://github.com/viq/NewsBlur.git
synced 2025-04-13 09:38:09 +00:00
62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
'use strict'
|
|
|
|
var hiredis = require('hiredis')
|
|
var ReplyError = require('../lib/replyError')
|
|
var ParserError = require('../lib/parserError')
|
|
|
|
/**
|
|
* Parse data
|
|
* @param parser
|
|
* @returns {*}
|
|
*/
|
|
function parseData (parser, data) {
|
|
try {
|
|
return parser.reader.get()
|
|
} catch (err) {
|
|
// Protocol errors land here
|
|
// Reset the parser. Otherwise new commands can't be processed properly
|
|
parser.reader = new hiredis.Reader(parser.options)
|
|
parser.returnFatalError(new ParserError(err.message, JSON.stringify(data), -1))
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Hiredis Parser
|
|
* @param options
|
|
* @constructor
|
|
*/
|
|
function HiredisReplyParser (options) {
|
|
this.returnError = options.returnError
|
|
this.returnFatalError = options.returnFatalError || options.returnError
|
|
this.returnReply = options.returnReply
|
|
this.name = 'hiredis'
|
|
this.options = {
|
|
return_buffers: !!options.returnBuffers
|
|
}
|
|
this.reader = new hiredis.Reader(this.options)
|
|
}
|
|
|
|
HiredisReplyParser.prototype.execute = function (data) {
|
|
this.reader.feed(data)
|
|
var reply = parseData(this, data)
|
|
|
|
while (reply !== undefined) {
|
|
if (reply && reply.name === 'Error') {
|
|
this.returnError(new ReplyError(reply.message))
|
|
} else {
|
|
this.returnReply(reply)
|
|
}
|
|
reply = parseData(this, data)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Reset the parser values to the initial state
|
|
*
|
|
* @returns {undefined}
|
|
*/
|
|
HiredisReplyParser.prototype.reset = function () {
|
|
this.reader = new hiredis.Reader(this.options)
|
|
}
|
|
|
|
module.exports = HiredisReplyParser
|