system.HandleEvent -> querymanager -> matching queries
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
736c2577db
commit
13b7a16dc7
@ -4,7 +4,7 @@ import EventEmitter from "eventemitter3";
|
||||
import { FeedCache } from "@snort/shared";
|
||||
import { NostrEvent, ReqFilter, TaggedNostrEvent } from "./nostr";
|
||||
import { RelaySettings, ConnectionStateSnapshot, OkResponse } from "./connection";
|
||||
import { RequestBuilder } from "./request-builder";
|
||||
import { BuiltRawReqFilter, RequestBuilder } from "./request-builder";
|
||||
import { RelayMetricHandler } from "./relay-metric-handler";
|
||||
import {
|
||||
CachedMetadata,
|
||||
@ -30,7 +30,7 @@ export interface NostrSystemEvents {
|
||||
change: (state: SystemSnapshot) => void;
|
||||
auth: (challenge: string, relay: string, cb: (ev: NostrEvent) => void) => void;
|
||||
event: (subId: string, ev: TaggedNostrEvent) => void;
|
||||
request: (filter: ReqFilter) => void;
|
||||
filters: (filter: BuiltRawReqFilter) => void;
|
||||
}
|
||||
|
||||
export interface NostrsystemProps {
|
||||
@ -149,6 +149,7 @@ export class NostrSystem extends EventEmitter<NostrSystemEvents> implements Syst
|
||||
this.#queryManager.on("trace", t => {
|
||||
this.relayMetricsHandler.onTraceReport(t);
|
||||
});
|
||||
this.#queryManager.on("filters", (f: BuiltRawReqFilter) => this.emit("filters", f));
|
||||
}
|
||||
|
||||
get Sockets(): ConnectionStateSnapshot[] {
|
||||
@ -191,6 +192,7 @@ export class NostrSystem extends EventEmitter<NostrSystemEvents> implements Syst
|
||||
|
||||
HandleEvent(ev: TaggedNostrEvent) {
|
||||
this.emit("event", "*", ev);
|
||||
this.#queryManager.handleEvent(ev);
|
||||
}
|
||||
|
||||
async BroadcastEvent(ev: NostrEvent, cb?: (rsp: OkResponse) => void): Promise<OkResponse[]> {
|
||||
|
@ -8,6 +8,7 @@ import { trimFilters } from "./request-trim";
|
||||
interface QueryManagerEvents {
|
||||
change: () => void;
|
||||
trace: (report: TraceReport) => void;
|
||||
filters: (req: BuiltRawReqFilter) => void;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -58,6 +59,7 @@ export class QueryManager extends EventEmitter<QueryManagerEvents> {
|
||||
q.on("trace", r => this.emit("trace", r));
|
||||
q.on("filters", fx => {
|
||||
this.#send(q, fx);
|
||||
this.emit("filters", fx);
|
||||
});
|
||||
|
||||
this.#queries.set(req.id, q);
|
||||
@ -66,6 +68,10 @@ export class QueryManager extends EventEmitter<QueryManagerEvents> {
|
||||
}
|
||||
}
|
||||
|
||||
handleEvent(ev: TaggedNostrEvent) {
|
||||
this.#queries.forEach(q => q.handleEvent("*", ev));
|
||||
}
|
||||
|
||||
/**
|
||||
* Async fetch results
|
||||
*/
|
||||
|
@ -217,7 +217,7 @@ export class Query extends EventEmitter<QueryEvents> {
|
||||
return this.#feed.snapshot;
|
||||
}
|
||||
|
||||
#handleEvent(sub: string, e: TaggedNostrEvent) {
|
||||
handleEvent(sub: string, e: TaggedNostrEvent) {
|
||||
for (const t of this.#tracing) {
|
||||
if (t.id === sub || sub === "*") {
|
||||
if (t.filters.some(v => eventMatchesFilter(e, v))) {
|
||||
@ -402,7 +402,7 @@ export class Query extends EventEmitter<QueryEvents> {
|
||||
responseTime: qt.responseTime,
|
||||
} as TraceReport),
|
||||
);
|
||||
const handler = (sub: string, ev: TaggedNostrEvent) => this.#handleEvent(sub, ev);
|
||||
const handler = (sub: string, ev: TaggedNostrEvent) => this.handleEvent(sub, ev);
|
||||
c.on("event", handler);
|
||||
this.on("end", () => c.off("event", handler));
|
||||
this.#tracing.push(qt);
|
||||
|
Loading…
Reference in New Issue
Block a user