using Fleet.Server; using MoShiro.Backend.Application; using MoShiro.Protocol; namespace MoShiro.Backend.Gateway; /// /// RawChunk 收件箱(二进制通道 16):持久化之后才返回,Fleet 随后才回复 ACK,按 chunk_id 去重。 /// 永远不可能被接受的块(损坏、冒名、未知 Kind)也确认掉并记录原因,否则节点会无限重发。 /// public sealed class RawChunkInbox : IInbox { private readonly IngestService _ingest; public RawChunkInbox(IngestService ingest) { _ingest = ingest; } public byte Channel => MoShiroChannels.RawChunk; public async ValueTask HandleAsync(NodeRecord node, Guid msgId, ReadOnlyMemory payload, CancellationToken ct) => await _ingest.IngestAsync(node.Id, msgId, payload, ct) switch { IngestOutcome.Stored => InboxOutcome.Stored, _ => InboxOutcome.Duplicate, }; }