Table of Contents

Class HookPipeline<TEvent, TContext>

Namespace
DotBoxD.Plugins.Runtime
Assembly
DotBoxD.Plugins.dll
public class HookPipeline<TEvent, TContext>

Type Parameters

TEvent
TContext
Inheritance
HookPipeline<TEvent, TContext>
Inherited Members

Methods

ConfigureResultDispatch<TResult>(ResultHookDispatchOptions<TResult>)

public HookPipeline<TEvent, TContext> ConfigureResultDispatch<TResult>(ResultHookDispatchOptions<TResult> options) where TResult : struct, IHookResult

Parameters

options ResultHookDispatchOptions<TResult>

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

FireResultAsync<TResult>(TEvent, ResultHookDispatchOptions<TResult>, CancellationToken)

public ValueTask<TResult?> FireResultAsync<TResult>(TEvent e, ResultHookDispatchOptions<TResult> options, CancellationToken cancellationToken = default) where TResult : struct, IHookResult

Parameters

e TEvent
options ResultHookDispatchOptions<TResult>
cancellationToken CancellationToken

Returns

ValueTask<TResult?>

Type Parameters

TResult

FireResultAsync<TResult>(TEvent, CancellationToken)

Dispatches result hooks for e in descending priority order and returns the first successful result, or null when none is registered or none succeeds. The host applies the returned result to its live state.

public ValueTask<TResult?> FireResultAsync<TResult>(TEvent e, CancellationToken cancellationToken = default) where TResult : struct, IHookResult

Parameters

e TEvent
cancellationToken CancellationToken

Returns

ValueTask<TResult?>

Type Parameters

TResult

InvokeHostHandler(Action<TEvent, TContext>)

public HookPipeline<TEvent, TContext> InvokeHostHandler(Action<TEvent, TContext> handler)

Parameters

handler Action<TEvent, TContext>

Returns

HookPipeline<TEvent, TContext>

InvokeHostHandler(Action<TEvent>)

public HookPipeline<TEvent, TContext> InvokeHostHandler(Action<TEvent> handler)

Parameters

handler Action<TEvent>

Returns

HookPipeline<TEvent, TContext>

InvokeHostHandler(Func<TEvent, ValueTask>)

public HookPipeline<TEvent, TContext> InvokeHostHandler(Func<TEvent, ValueTask> handler)

Parameters

handler Func<TEvent, ValueTask>

Returns

HookPipeline<TEvent, TContext>

InvokeHostHandler(Func<TEvent, TContext, ValueTask>)

public HookPipeline<TEvent, TContext> InvokeHostHandler(Func<TEvent, TContext, ValueTask> handler)

Parameters

handler Func<TEvent, TContext, ValueTask>

Returns

HookPipeline<TEvent, TContext>

RegisterLocal<TResult>(Func<TEvent, CancellationToken, ValueTask<TResult>>, int)

public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, CancellationToken, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

handler Func<TEvent, CancellationToken, ValueTask<TResult>>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

RegisterLocal<TResult>(Func<TEvent, ValueTask<TResult>>, int)

public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

handler Func<TEvent, ValueTask<TResult>>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

RegisterLocal<TResult>(Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>, int)

public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, TContext, CancellationToken, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

handler Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

RegisterLocal<TResult>(Func<TEvent, TContext, ValueTask<TResult>>, int)

public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, TContext, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

handler Func<TEvent, TContext, ValueTask<TResult>>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

RegisterLocal<TResult>(Func<TEvent, TContext, TResult>, int)

public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, TContext, TResult> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

handler Func<TEvent, TContext, TResult>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

RegisterLocal<TResult>(Func<TEvent, TResult>, int)

public HookPipeline<TEvent, TContext> RegisterLocal<TResult>(Func<TEvent, TResult> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

handler Func<TEvent, TResult>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

Register<TResult>(Func<TEvent, TContext, TResult>, int)

public HookPipeline<TEvent, TContext> Register<TResult>(Func<TEvent, TContext, TResult> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

handler Func<TEvent, TContext, TResult>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

Register<TResult>(Func<TEvent, TResult>, int)

public HookPipeline<TEvent, TContext> Register<TResult>(Func<TEvent, TResult> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

handler Func<TEvent, TResult>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

Run(Action<TEvent, TContext>)

public HookPipeline<TEvent, TContext> Run(Action<TEvent, TContext> handler)

Parameters

handler Action<TEvent, TContext>

Returns

HookPipeline<TEvent, TContext>

Run(Action<TEvent>)

public HookPipeline<TEvent, TContext> Run(Action<TEvent> handler)

Parameters

handler Action<TEvent>

Returns

HookPipeline<TEvent, TContext>

Run(Func<TEvent, ValueTask>)

public HookPipeline<TEvent, TContext> Run(Func<TEvent, ValueTask> handler)

Parameters

handler Func<TEvent, ValueTask>

Returns

HookPipeline<TEvent, TContext>

Run(Func<TEvent, TContext, ValueTask>)

The terminal the analyzer lowers to verified IR. It never runs as host code: un-lowered it throws, so plugin logic cannot accidentally execute unsandboxed.

public HookPipeline<TEvent, TContext> Run(Func<TEvent, TContext, ValueTask> handler)

Parameters

handler Func<TEvent, TContext, ValueTask>

Returns

HookPipeline<TEvent, TContext>

RunLocal(Action<TEvent, TContext>)

public HookPipeline<TEvent, TContext> RunLocal(Action<TEvent, TContext> handler)

Parameters

handler Action<TEvent, TContext>

Returns

HookPipeline<TEvent, TContext>

RunLocal(Action<TEvent>)

public HookPipeline<TEvent, TContext> RunLocal(Action<TEvent> handler)

Parameters

handler Action<TEvent>

Returns

HookPipeline<TEvent, TContext>

RunLocal(Func<TEvent, ValueTask>)

public HookPipeline<TEvent, TContext> RunLocal(Func<TEvent, ValueTask> handler)

Parameters

handler Func<TEvent, ValueTask>

Returns

HookPipeline<TEvent, TContext>

RunLocal(Func<TEvent, TContext, ValueTask>)

Native host terminal — runs in-process (NOT sandboxed). Use sparingly.

public HookPipeline<TEvent, TContext> RunLocal(Func<TEvent, TContext, ValueTask> handler)

Parameters

handler Func<TEvent, TContext, ValueTask>

Returns

HookPipeline<TEvent, TContext>

Select<TNext>(Func<TEvent, TContext, TNext>)

Projects the flowing element to a new type for downstream Where/terminal stages.

public HookStage<TEvent, TNext, TContext> Select<TNext>(Func<TEvent, TContext, TNext> projection)

Parameters

projection Func<TEvent, TContext, TNext>

Returns

HookStage<TEvent, TNext, TContext>

Type Parameters

TNext

Select<TNext>(Func<TEvent, TNext>)

public HookStage<TEvent, TNext, TContext> Select<TNext>(Func<TEvent, TNext> projection)

Parameters

projection Func<TEvent, TNext>

Returns

HookStage<TEvent, TNext, TContext>

Type Parameters

TNext

Use(InstalledKernel)

public HookPipeline<TEvent, TContext> Use(InstalledKernel kernel)

Parameters

kernel InstalledKernel

Returns

HookPipeline<TEvent, TContext>

Use(InstalledKernelPool)

public HookPipeline<TEvent, TContext> Use(InstalledKernelPool pool)

Parameters

pool InstalledKernelPool

Returns

HookPipeline<TEvent, TContext>

UseGeneratedChain(PluginPackage)

Installs an analyzer-generated hook-chain package and wires it into this pipeline. Called by the generated interceptor that replaces a Run(lambda) call site, so the lowered chain runs as verified IR instead of throwing. Blocks on install at setup time.

public HookPipeline<TEvent, TContext> UseGeneratedChain(PluginPackage package)

Parameters

package PluginPackage

Returns

HookPipeline<TEvent, TContext>

UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, CancellationToken, ValueTask<TResult>>, int)

public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, CancellationToken, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

package PluginPackage
handler Func<TEvent, CancellationToken, ValueTask<TResult>>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, ValueTask<TResult>>, int)

public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

package PluginPackage
handler Func<TEvent, ValueTask<TResult>>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>, int)

public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, TContext, CancellationToken, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

package PluginPackage
handler Func<TEvent, TContext, CancellationToken, ValueTask<TResult>>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TContext, ValueTask<TResult>>, int)

public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, TContext, ValueTask<TResult>> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

package PluginPackage
handler Func<TEvent, TContext, ValueTask<TResult>>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TContext, TResult>, int)

public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, TContext, TResult> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

package PluginPackage
handler Func<TEvent, TContext, TResult>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

UseGeneratedLocalResultChain<TResult>(PluginPackage, Func<TEvent, TResult>, int)

public HookPipeline<TEvent, TContext> UseGeneratedLocalResultChain<TResult>(PluginPackage package, Func<TEvent, TResult> handler, int priority = 0) where TResult : struct, IHookResult

Parameters

package PluginPackage
handler Func<TEvent, TResult>
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

UseGeneratedResultChain<TResult>(PluginPackage, int)

public HookPipeline<TEvent, TContext> UseGeneratedResultChain<TResult>(PluginPackage package, int priority = 0) where TResult : struct, IHookResult

Parameters

package PluginPackage
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

UseProjecting(InstalledKernel, string, RemoteLocalPush)

Wires a lowered local-terminal chain kernel (a remote RunLocal chain): the kernel's lowered Where/Select always run here in the sandbox, and for each event that passes the filter the projected value is encoded and handed to push - the control-plane callback that delivers it across the IPC boundary to the plugin's native delegate. Non-matching events never reach push, so filtering provably happens server-side before any IPC.

public HookPipeline<TEvent, TContext> UseProjecting(InstalledKernel kernel, string subscriptionId, RemoteLocalPush push)

Parameters

kernel InstalledKernel
subscriptionId string
push RemoteLocalPush

Returns

HookPipeline<TEvent, TContext>

UseProjectingResult(InstalledKernel, string, Type, RemoteLocalResultRequest, int)

public HookPipeline<TEvent, TContext> UseProjectingResult(InstalledKernel filterKernel, string subscriptionId, Type resultType, RemoteLocalResultRequest request, int priority = 0)

Parameters

filterKernel InstalledKernel
subscriptionId string
resultType Type
request RemoteLocalResultRequest
priority int

Returns

HookPipeline<TEvent, TContext>

UseProjectingResult<TResult>(InstalledKernel, string, RemoteLocalResultRequest, int)

public HookPipeline<TEvent, TContext> UseProjectingResult<TResult>(InstalledKernel filterKernel, string subscriptionId, RemoteLocalResultRequest request, int priority = 0) where TResult : struct, IHookResult

Parameters

filterKernel InstalledKernel
subscriptionId string
request RemoteLocalResultRequest
priority int

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TResult

UseResult(InstalledKernel, Type, int)

public HookPipeline<TEvent, TContext> UseResult(InstalledKernel kernel, Type resultType, int priority = 0)

Parameters

kernel InstalledKernel
resultType Type
priority int

Returns

HookPipeline<TEvent, TContext>

Use<TKernel>()

public HookPipeline<TEvent, TContext> Use<TKernel>() where TKernel : class

Returns

HookPipeline<TEvent, TContext>

Type Parameters

TKernel

Where(Func<TEvent, bool>)

Element-only filter — the same as the (element, context) overload with the context discarded. Both arities are always available so a stage need not take the context it doesn't use.

public HookPipeline<TEvent, TContext> Where(Func<TEvent, bool> filter)

Parameters

filter Func<TEvent, bool>

Returns

HookPipeline<TEvent, TContext>

Where(Func<TEvent, ValueTask<bool>>)

public HookPipeline<TEvent, TContext> Where(Func<TEvent, ValueTask<bool>> filter)

Parameters

filter Func<TEvent, ValueTask<bool>>

Returns

HookPipeline<TEvent, TContext>

Where(Func<TEvent, TContext, bool>)

public HookPipeline<TEvent, TContext> Where(Func<TEvent, TContext, bool> filter)

Parameters

filter Func<TEvent, TContext, bool>

Returns

HookPipeline<TEvent, TContext>

Where(Func<TEvent, TContext, ValueTask<bool>>)

public HookPipeline<TEvent, TContext> Where(Func<TEvent, TContext, ValueTask<bool>> filter)

Parameters

filter Func<TEvent, TContext, ValueTask<bool>>

Returns

HookPipeline<TEvent, TContext>