Files
RP412/MUNGA/APPMGR.h
T
CydandClaude Fable 5 2d5057c528 Hosted races stage properly: the owner no longer launches itself
Round five reached the race - full mesh on all three machines, eggs,
ACKs, mission running - but the owner raced ALONE. Cause: the engine
self-runs a pod at WaitingForLaunch when its console host is not
online (the arcade no-console fallback), and the owner''s in-process
console never connects to its own pod. On fast-loading owners the
self-run beat the console''s staging gate, so RunMission was never
sent and the members sat staged at black screens until someone hit
the & emergency-abort key.

gConsoleMarshalsLaunch (APPMGR) now tells the engine an in-process
console owns the launch: the network-race install sets it and the
owner holds at WaitingForLaunch with everyone else; plain single
player leaves it False and auto-runs as always. Verified on loopback:
all pods staged - RUN is back in the hosted-race log and both the
hosted race and the single-player cycle pass.

Also: unhandled-exception minidumps (rpl4crash.dmp beside the exe,
dbghelp loaded lazily) so test-machine crashes hand back stacks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 23:40:04 -05:00

45 lines
1.1 KiB
C++

#pragma once
#include "app.h"
extern HWND ghWnd;
// per-frame observer called once per RunMissions frame, after the
// foreground pass (the single-player local-console marshal uses this)
extern void (*gPerFrameHook)();
// True when an in-process console marshals the launch: suppresses the
// no-console self-run in CheckLoadMessageHandler so a hosted network
// race stages at WaitingForLaunch until every pod is ready. Plain
// single player leaves it False and auto-runs exactly as always.
extern Logical gConsoleMarshalsLaunch;
class ApplicationManager : public Node
{
public:
ApplicationManager(HINSTANCE hInstance, HWND hWnd, Scalar frame_rate);
~ApplicationManager();
void StartApplication(Application *new_app);
void RunMissions();
Scalar GetFrameRate()
{
Check(this);
return frameRate;
}
HINSTANCE GetHInstance() { return mHInstance; }
HWND GetHWnd() { return ghWnd; }
static ApplicationManager* GetCurrentManager() { return CurrentAppManager; }
protected:
static ApplicationManager* CurrentAppManager;
Scalar frameDuration, frameRate;
SChainOf<Application*> runningApplications;
HINSTANCE mHInstance;
};