feat(app): FA2 -- fellowship/allegiance command routing for graphical + headless hosts

Both LiveSocialSessionBindings construction sites updated together
(LiveSessionRuntimeFactory.cs, HeadlessSessionHost.cs) so the single
GameEventWiring.WireAll registration site serves both hosts identically
(the K-slice unification). CurrentGameRuntimeCommandAdapter implements
IRuntimeFellowshipCommands/IRuntimeAllegianceCommands over the App
command bus (LiveSessionCommandRouter gains 12 new *RuntimeCmd records
+ registrations + LiveSessionCommandBindings send delegates), mirroring
DirectGameRuntimeCommandAdapter's direct-session shape including the
identical Quit leader-hand-off rule read from RuntimeFellowshipState.
CurrentGameRuntimeAdapter (the graphical IGameRuntimeView/
IGameRuntimeCommands composite) exposes the two new views/command
groups. Headless's DirectGameRuntimeCommandAdapter needed no changes --
it already implements both new interfaces from the Runtime-layer
commit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-12 01:32:18 +02:00
parent 369729f06a
commit cced83b483
8 changed files with 363 additions and 3 deletions

View file

@ -258,7 +258,9 @@ internal sealed class LiveSessionRuntimeFactory
_domain.Communication.TurbineChat,
_domain.Communication.Friends,
_domain.Communication.Squelch,
(text, type) => _domain.Communication.AddText(text, type)));
(text, type) => _domain.Communication.AddText(text, type),
Fellowship: _domain.Runtime.FellowshipOwner,
Allegiance: _domain.Runtime.AllegianceOwner));
return new GraphicalSessionEventRoute(
route,
_domain.Runtime,
@ -591,6 +593,20 @@ internal sealed class LiveSessionRuntimeFactory
CharacterState: _domain.Character,
SendSingleCharacterOption: SendSingleCharacterOption,
SaveCharacterOptions: SaveCharacterOptionsIfDirty,
// Campaign FA slice FA2 (2026-08-12): fellowship + allegiance send
// wrappers, matching the WorldSession.SendXxx methods FA2 added.
SendFellowshipCreate: session.SendFellowshipCreate,
SendFellowshipRecruit: session.SendFellowshipRecruit,
SendFellowshipDismiss: session.SendFellowshipDismiss,
SendFellowshipQuit: session.SendFellowshipQuit,
SendFellowshipAssignNewLeader: session.SendFellowshipAssignNewLeader,
SendFellowshipChangeOpenness: session.SendFellowshipChangeOpenness,
SendFellowshipUpdateRequest: session.SendFellowshipUpdateRequest,
SendAllegianceSwear: session.SendAllegianceSwear,
SendAllegianceBreak: session.SendAllegianceBreak,
SendAllegianceKick: session.SendAllegianceKick,
SendAllegianceInfoRequest: session.SendAllegianceInfoRequest,
SendAllegianceUpdateRequest: session.SendAllegianceUpdateRequest,
Log: _log);
}