diff --git a/lib/wire/eventConnection.js b/lib/wire/eventConnection.js index 7c370b2..e480b55 100644 --- a/lib/wire/eventConnection.js +++ b/lib/wire/eventConnection.js @@ -76,7 +76,7 @@ EventConnection.prototype._bind_events = function (host, port, callback) { eventcount = buf.readInt32LE(pos); tmp_event[eventname] = eventcount; pos += 4; - if (prevcount !== eventcount) + if (prevcount !== 0 && prevcount !== eventcount) lst_event.push({ name: eventname, count: eventcount }); } xdr.readInt64(); // ignore AST INFO diff --git a/lib/wire/fbEventManager.js b/lib/wire/fbEventManager.js index 207d3ee..fa5cc59 100644 --- a/lib/wire/fbEventManager.js +++ b/lib/wire/fbEventManager.js @@ -39,6 +39,11 @@ FbEventManager.prototype._createEventLoop = function (callback) { return; } + if (ret.events?.length == 0) { + // events has been registred + self.emit('events_registered', self.events); + } + ret.events.forEach(function (event) { self.emit('post_event', event.name, event.count) }) @@ -57,7 +62,7 @@ FbEventManager.prototype._changeEvent = function (callback) { doError(err, callback); return; } - + self.db.connection.queEvents(self.events, self.eventid, callback); }) } diff --git a/test/index.js b/test/index.js index 345e9c1..7e9dd65 100644 --- a/test/index.js +++ b/test/index.js @@ -75,13 +75,25 @@ describe('Events', function () { }); after(function () { + const remove_database_file = () => { + if (fs.existsSync(config.database)) { + fs.unlinkSync(config.database); + } + } + if (db) { - db.detach(); + db.detach(() => { + remove_database_file(); + }); + } else { + remove_database_file(); } + }); it("should create a connection", function (done) { db.attachEvent((err, evtmgr) => { + assert.equal(evtmgr.eventid, 1); assert.ok(!err, err); done(); }) @@ -90,33 +102,71 @@ describe('Events', function () { it("should register an event", function (done) { db.attachEvent((err, evtmgr) => { assert.ok(!err, err); + assert.equal(evtmgr.eventid, 2); - evtmgr.registerEvent(["TRG_TEST_EVENTS"], (err) => { + evtmgr.registerEvent(["TRG_TEST_EVENTS_FIRST"], (err) => { assert.ok(!err, err); done(); }); }) }); + it("should unregister an event", function (done) { + db.attachEvent((err, evtmgr) => { + assert.ok(!err, err); + assert.equal(evtmgr.eventid, 3); + + evtmgr.on('events_registered', () => { + evtmgr.unregisterEvent(["TRG_TEST_EVENTS_SECOND"], (err) => { + assert.ok(!err, err); + assert.equal(evtmgr.events["TRG_TEST_EVENTS_SECOND"], undefined); + done(); + }); + }); + + evtmgr.registerEvent(["TRG_TEST_EVENTS_SECOND"], (err) => { + assert.ok(!err, err); + }); + }) + }); + it("should receive an event", function (done) { db.attachEvent((err, evtmgr) => { assert.ok(!err, err); + assert.equal(evtmgr.eventid, 4); + + evtmgr.on('post_event', (name, count) => { + assert.equal(name, 'TRG_TEST_EVENTS'); + assert.equal(count, 2); + done(); + }); + evtmgr.registerEvent(["TRG_TEST_EVENTS"], (err) => { assert.ok(!err, err); - evtmgr.on('post_event', (name, count) => { - assert.equal(name, 'TRG_TEST_EVENTS'); - assert.equal(count, 1); - done(); - }); - db.query('INSERT INTO TEST_EVENTS (ID, NAME) VALUES (?, ?)', [1, 'xpto'], (err) => { assert.ok(!err, err); }); }); }) }); + + it("should receive an event when the event is registered", function (done) { + db.attachEvent((err, evtmgr) => { + assert.ok(!err, err); + assert.equal(evtmgr.eventid, 5); + + evtmgr.on('events_registered', (events) => { + assert.ok(events["TRG_TEST_EVENTS_SECOND"]); + done(); + }); + + evtmgr.registerEvent(["TRG_TEST_EVENTS_SECOND"], (err) => { + assert.ok(!err, err); + }); + }) + }) }); describe('Auth plugin connection', function () {