class BBS::Door

A door: a program the caller steps into from the BBS, as in the doors of the old boards. The BBS hands the telnet line over, the program talks to the caller directly, and the line comes back when the program exits.

The program is a BBS::FakeOS definition, a BBS::Flow, or anything that responds to call(session, context). A flow gets a copy of the caller’s context (so its ask steps cannot overwrite the BBS’s own keys), and since a flow ends without an exit command of its own, the door waits for ENTER before handing the line back:

SERMO = BBS::Door.new(:sermo, Sermo::OS, label: '&SERMO')
SERMO.run(session, ctx)

Inside an Application, declare doors with the door DSL and let BBS::Application::Builder#run take the caller through them (see BBS::Application).