feat(S2-b): connect durable MQTT sync to capture workflow
This commit is contained in:
@@ -3,25 +3,30 @@ using FieldLogger.Models;
|
||||
namespace FieldLogger.Services.Sync;
|
||||
|
||||
/// <summary>
|
||||
/// Placeholder for the future MQTT synchronization layer:
|
||||
/// - subscribe to receive jobs configured on the server
|
||||
/// - publish logged points as they are captured
|
||||
/// - reconcile the Synced flags on <see cref="Job"/> and <see cref="LoggedPoint"/>
|
||||
/// Planned implementation: MQTTnet client against the configured broker.
|
||||
/// Durable app MQTT synchronization. Captures are persisted locally before this service queues
|
||||
/// them, and queue rows are released only by an application-level ACCEPTED/DUPLICATE ack.
|
||||
/// </summary>
|
||||
public interface IMqttSyncService
|
||||
{
|
||||
bool IsConnected { get; }
|
||||
string Status { get; }
|
||||
event EventHandler<string>? StatusChanged;
|
||||
event EventHandler<PointSyncFailureEventArgs>? PointRejected;
|
||||
Task StartAsync(CancellationToken cancellationToken = default);
|
||||
Task StopAsync();
|
||||
Task ConnectAsync(CancellationToken cancellationToken = default);
|
||||
Task DisconnectAsync();
|
||||
Task PublishPointAsync(LoggedPoint point, CancellationToken cancellationToken = default);
|
||||
}
|
||||
|
||||
/// <summary>No-op stand-in until the MQTT backend exists.</summary>
|
||||
public sealed class NullMqttSyncService : IMqttSyncService
|
||||
public sealed class PointSyncFailureEventArgs : EventArgs
|
||||
{
|
||||
public bool IsConnected => false;
|
||||
public Task ConnectAsync(CancellationToken cancellationToken = default) => Task.CompletedTask;
|
||||
public Task DisconnectAsync() => Task.CompletedTask;
|
||||
public Task PublishPointAsync(LoggedPoint point, CancellationToken cancellationToken = default) => Task.CompletedTask;
|
||||
public LoggedPoint Point { get; }
|
||||
public string ReasonCode { get; }
|
||||
|
||||
public PointSyncFailureEventArgs(LoggedPoint point, string reasonCode)
|
||||
{
|
||||
Point = point;
|
||||
ReasonCode = reasonCode;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user