/ GUNRPG.Application / Distributed / ILockstepTransport.cs
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  }