CultNet: refuse hop edges whose citer is a variant; withdraw a refused hop subscription
An edge carries the reference payload of its citer's resolved document, and the citer is never a selected row under `cited`, so a variant citer slipped past the selected-row refusal. Edges are now checked by the same rule (typed NotSupportedException naming the variant), on the paged and the whole-set paths. Reconcile refused a hop subscriber whose selection selected a variant without withdrawing it, so it was told again on every store change. It withdraws as the subscribe path does. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
282e337c2c
commit
a0baa542d0
3 changed files with 113 additions and 13 deletions
|
|
@ -358,8 +358,10 @@ namespace GameCult.Networking
|
|||
}
|
||||
catch (NotSupportedException refusal)
|
||||
{
|
||||
// Q6: the selection selects a variant, which CultNet cannot carry. This subscriber is told, by key, and keeps what
|
||||
// it was delivered; a change never throws out of the change handler.
|
||||
// Q6: the selection selects a variant, which CultNet cannot carry. Refused as the subscribe path refuses it: the
|
||||
// subscription is withdrawn, so the peer is told once, not once per store change; a change never throws out of
|
||||
// the change handler.
|
||||
Withdraw(key, sendRemovals: false, forgetRequest: true);
|
||||
key.Peer.SendCultNet(new CultNetErrorMessage { Error = refusal.Message });
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue