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:
parent
1b967896df
commit
9503419b0e
@ -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) {
|
||||
|
@ -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
75
test/keeper/Event.test.ts
Normal 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())
|
||||
})
|
||||
})
|
||||
|
||||
})
|
@ -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()
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user