Skip to content

SubSocket: connection state hooks for publisher lifecycle events #209

@Karrq

Description

@Karrq

Problem

The SubSocket driver manages publisher connection state internally (Active/Inactive transitions, backoff retries, reconnection). These transitions are invisible to consumers - there's no way to react when a publisher disconnects or reconnects.

Proposal

Add a connection state hook to SubSocket, similar to the existing ConnectionHook. This hook would fire on publisher state transitions in the driver.

pub trait SubConnectionStateHook<A>: Send + Sync + 'static {
    fn on_connected(&self, addr: &A);
    fn on_reconnected(&self, addr: &A);
    fn on_disconnected(&self, addr: &A);
    fn on_terminated(&self, addr: &A);
}
let sub = SubSocket::new(transport)
    .with_connection_hook(attest_hook)
    .with_state_hook(my_state_hook);

The driver already has the information to fire these - the transitions happen in poll_publishers (Active → Inactive) and on_connection (Inactive → Active). Distinguishing on_connected from on_reconnected requires tracking whether a publisher was previously Active.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions