system.HandleEvent -> querymanager -> matching queries
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Martti Malmi 2024-01-13 22:44:16 +02:00
parent 736c2577db
commit 13b7a16dc7
3 changed files with 12 additions and 4 deletions

View File

@ -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[]> {

View File

@ -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
*/

View File

@ -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);