1
0
mirror of https://github.com/oceanprotocol-archive/squid-js.git synced 2024-02-02 15:31:51 +01:00

added more functionality to event listener

This commit is contained in:
Sebastian Gerske 2018-11-23 12:40:49 +01:00
parent 1b967896df
commit 9503419b0e
4 changed files with 120 additions and 30 deletions

View File

@ -1,9 +1,11 @@
import GenericContract from "./contracts/GenericContract"
import EventListener from "./EventListener"
export default class Event {
private poller
private lastBlock: number = 0
private interval: number = 200
constructor(private contractName: string,
private eventName: string,
@ -16,7 +18,16 @@ export default class Event {
}
public listen(callback: any) {
this.poller = setTimeout(() => this.handler(callback), 200)
this.poller = setTimeout(
() => this.handler(callback),
this.interval)
}
public async listenOnce() {
this.listen((events: any[]) => {
EventListener.unsubscribe(this)
return events
})
}
private async handler(callback: any) {

View File

@ -13,13 +13,17 @@ export default class EventListener {
}
public static unsubscribe(event): boolean {
EventListener.events = EventListener.events.splice(
EventListener.events.findIndex((e) => e === event),
1)
event.stopListen()
const i = EventListener.events.indexOf(event)
if (i > -1) {
EventListener.events.splice(i, 1)
}
return true
}
public static count() {
return EventListener.events.length
}
private static events: Event[] = []
}

75
test/keeper/Event.test.ts Normal file
View File

@ -0,0 +1,75 @@
import {assert} from "chai"
import ConfigProvider from "../../src/ConfigProvider"
import EventListener from "../../src/keeper/EventListener"
import Keeper from "../../src/keeper/Keeper"
import Account from "../../src/ocean/Account"
import Ocean from "../../src/ocean/Ocean"
import config from "../config"
import TestContractHandler from "./TestContractHandler"
let keeper: Keeper
let ocean: Ocean
let accounts: Account[]
describe("EventListener", () => {
before(async () => {
ConfigProvider.setConfig(config)
await TestContractHandler.prepareContracts()
keeper = await Keeper.getInstance()
assert(keeper)
ocean = await Ocean.getInstance(config)
assert(ocean)
accounts = await ocean.getAccounts()
assert(accounts)
})
describe("#listen()", () => {
it("should listen to an event", (done) => {
const acc = accounts[1]
const event = EventListener.subscribe("OceanToken",
"Transfer",
{
to: acc.getId(),
})
event.listen((events) => {
assert(events)
assert(events.length === 2)
done()
})
const {market} = keeper
market.requestTokens(400, acc.getId())
market.requestTokens(400, acc.getId())
})
})
describe("#listenOnce()", () => {
xit("should listen once", async () => {
const acc = accounts[1]
const event = EventListener.subscribe("OceanToken",
"Transfer",
{
to: acc.getId(),
})
const events = await event.listenOnce()
assert(events, "no events")
const {market} = keeper
market.requestTokens(400, acc.getId())
})
})
})

View File

@ -29,40 +29,40 @@ describe("EventListener", () => {
it("should subscribe to an event", (done) => {
const acc = accounts[1]
const countBefore = EventListener.count()
const event = EventListener.subscribe("OceanToken",
"Transfer",
{
to: acc.getId(),
})
assert(event)
event.listen((events) => {
assert(events)
assert(events.length === 2)
done()
})
const {market} = keeper
market.requestTokens(400, acc.getId())
market.requestTokens(400, acc.getId())
})
})
describe("#unsubscribe()", () => {
it("should subscribe to an event", (done) => {
const event = EventListener.subscribe("OceanToken",
"Transfer",
{})
const unsubscribed = EventListener.unsubscribe(event)
assert(unsubscribed)
const countAfter = EventListener.count()
assert(countBefore + 1 === countAfter, `${countBefore}${countAfter}`)
done()
})
})
describe("#unsubscribe()", () => {
it("should unsubscribe from an event", (done) => {
const countBefore = EventListener.count()
const event = EventListener.subscribe("OceanToken",
"Transfer",
{})
const count = EventListener.count()
const unsubscribed = EventListener.unsubscribe(event)
assert(unsubscribed)
const countAfter = EventListener.count()
assert(count > countBefore, `${count}${countAfter}`)
assert(countBefore === countAfter, `${countBefore}${countAfter}`)
done()
})
})
})