ILockstepTransport.cs
1 namespace GUNRPG.Application.Distributed; 2 3 /// <summary> 4 /// Abstraction over the P2P transport layer for lockstep replication. 5 /// Implementations may use libp2p, in-memory (for testing), or other transports. 6 /// </summary> 7 public interface ILockstepTransport 8 { 9 /// <summary>Set of currently connected peer node IDs.</summary> 10 IReadOnlySet<Guid> ConnectedPeers { get; } 11 12 /// <summary>Broadcast an action to all connected peers.</summary> 13 Task BroadcastActionAsync(ActionBroadcastMessage message, CancellationToken ct = default); 14 15 /// <summary>Send an acknowledgment to a specific peer.</summary> 16 Task SendAckAsync(Guid peerId, ActionAckMessage message, CancellationToken ct = default); 17 18 /// <summary>Broadcast a state hash to all connected peers.</summary> 19 Task BroadcastHashAsync(HashBroadcastMessage message, CancellationToken ct = default); 20 21 /// <summary>Send a log sync request to a specific peer.</summary> 22 Task SendSyncRequestAsync(Guid peerId, LogSyncRequestMessage message, CancellationToken ct = default); 23 24 /// <summary>Send a log sync response to a specific peer.</summary> 25 Task SendSyncResponseAsync(Guid peerId, LogSyncResponseMessage message, CancellationToken ct = default); 26 27 /// <summary>Broadcast a single operator event to all connected peers.</summary> 28 Task BroadcastOperatorEventAsync(OperatorEventBroadcastMessage message, CancellationToken ct = default); 29 30 /// <summary>Send an operator event sync request to a specific peer.</summary> 31 Task SendOperatorEventSyncRequestAsync(Guid peerId, OperatorEventSyncRequestMessage message, CancellationToken ct = default); 32 33 /// <summary>Send an operator event sync response to a specific peer.</summary> 34 Task SendOperatorEventSyncResponseAsync(Guid peerId, OperatorEventSyncResponseMessage message, CancellationToken ct = default); 35 36 /// <summary>Raised when an action broadcast is received from a peer.</summary> 37 event Action<ActionBroadcastMessage>? OnActionReceived; 38 39 /// <summary>Raised when an action acknowledgment is received from a peer.</summary> 40 event Action<ActionAckMessage>? OnAckReceived; 41 42 /// <summary>Raised when a hash broadcast is received from a peer.</summary> 43 event Action<HashBroadcastMessage>? OnHashReceived; 44 45 /// <summary>Raised when a sync request is received from a peer.</summary> 46 event Action<LogSyncRequestMessage>? OnSyncRequestReceived; 47 48 /// <summary>Raised when a sync response is received from a peer.</summary> 49 event Action<LogSyncResponseMessage>? OnSyncResponseReceived; 50 51 /// <summary>Raised when a new peer connects.</summary> 52 event Action<Guid>? OnPeerConnected; 53 54 /// <summary>Raised when a peer disconnects.</summary> 55 event Action<Guid>? OnPeerDisconnected; 56 57 /// <summary>Raised when an operator event broadcast is received from a peer.</summary> 58 event Action<OperatorEventBroadcastMessage>? OnOperatorEventReceived; 59 60 /// <summary>Raised when an operator event sync request is received from a peer.</summary> 61 event Action<OperatorEventSyncRequestMessage>? OnOperatorEventSyncRequestReceived; 62 63 /// <summary>Raised when an operator event sync response is received from a peer.</summary> 64 event Action<OperatorEventSyncResponseMessage>? OnOperatorEventSyncResponseReceived; 65 }