Remove the concept of the 'stdio channel' from class DrivenEngine

This commit is contained in:
2025-12-18 15:28:05 -05:00
parent a9a5e52a23
commit 3dd6894305
3 changed files with 12 additions and 34 deletions

View File

@@ -37,7 +37,9 @@ DrivenEngineInitializerReg::DrivenEngineInitializerReg(DrivenEngineInitializer f
//////////////////////////////////////////////////////////////////////////////
int DrivenEngine::find_unused_chid() {
// Note: channel ID zero is special, it is never reused.
// Note: channel ID zero is never used. Channel ID 0 used to be
// reserved for the stdio channel. When we eliminated the stdio
// channel, we blocked off ID 0 permanently.
for (int i = 0; i < DRV_MAX_CHAN; i++) {
int id = next_unused_chid_++;
if (next_unused_chid_ == DRV_MAX_CHAN) next_unused_chid_ = 1;
@@ -48,6 +50,7 @@ int DrivenEngine::find_unused_chid() {
}
Channel *DrivenEngine::get_chid(int chid) const {
assert(chid != 0);
assert(unsigned(chid) < DRV_MAX_CHAN);
assert(channels_[chid].get() != nullptr);
return channels_[chid].get();
@@ -160,10 +163,6 @@ SharedChannel DrivenEngine::new_incoming_channel() {
}
}
SharedChannel DrivenEngine::get_stdio_channel() {
return stdio_channel_;
}
void DrivenEngine::set_visible_world_and_actor(World *w, int64_t id) {
visible_world_ = w;
visible_actor_id_ = id;
@@ -180,8 +179,6 @@ void DrivenEngine::stop_driver() {
DrivenEngine::DrivenEngine() {
next_unused_chid_ = 1;
stdio_channel_ = eng::make_shared<Channel>(this, 0, 0, "", false);
channels_[0] = stdio_channel_;
rescan_lua_source_ = false;
clock_ = 0.0;
have_prints_ = false;

View File

@@ -196,16 +196,6 @@ public:
//
SharedChannel new_incoming_channel();
// Obtain the stdio channel. There is only one stdio channel.
//
// DRIVER: the stdio channel is created automatically when the DrivenEngine
// is created. Stdio should be connected to a console which is in
// line-at-a-time mode. The driver is responsible for relaying data from
// the console into the stdio channel using drv_peek_outgoing,
// drv_sent_outgoing, drv_recv_incoming.
//
SharedChannel get_stdio_channel();
// Set the flag to rescan the lua source directory. The lua source
// directory is read once, automatically, at engine creation time.
// If you want to read it again, you must trigger a rescan.
@@ -300,7 +290,6 @@ private:
private:
SharedChannel channels_[DRV_MAX_CHAN];
int next_unused_chid_;
SharedChannel stdio_channel_;
eng::vector<SharedChannel> accepted_channels_;
eng::vector<uint32_t> new_outgoing_;
eng::vector<uint32_t> listen_ports_;

View File

@@ -6,19 +6,15 @@
#include <iomanip>
static void write_closed_message(Channel *ch, StreamBuffer *out) {
eng::ostringstream oss;
oss << "Chan " << ch->chid() << " closed [" << ch->error() << "]\n";
out->write_bytes(oss.str());
static void write_closed_message(Channel *ch) {
util::dprint("Chan ", ch->chid(), " closed [", ch->error(), "]\n");
}
static void dump_lines(StreamBuffer *in, StreamBuffer *out, int chid) {
static void dump_lines(StreamBuffer *in, int chid) {
while (true) {
eng::string l = in->readline();
if (l == "") break;
eng::ostringstream oss;
oss << "Chan " << chid << ": " << l;
out->write_bytes(oss.str());
util::dprint("Chan ", chid, ": ", l);
}
}
@@ -34,13 +30,11 @@ public:
}
virtual void event_update() override {
SharedChannel stdioch = get_stdio_channel();
dump_lines(stdioch->in(), stdioch->out(), 0);
eng::vector<SharedChannel> keep;
for (SharedChannel &ch : channels_) {
dump_lines(ch->in(), stdioch->out(), ch->chid());
dump_lines(ch->in(), ch->chid());
if (ch->closed()) {
write_closed_message(ch.get(), stdioch->out());
write_closed_message(ch.get());
} else {
keep.emplace_back(std::move(ch));
}
@@ -60,13 +54,11 @@ public:
}
virtual void event_update() override {
SharedChannel stdioch = get_stdio_channel();
dump_lines(stdioch->in(), stdioch->out(), 0);
eng::vector<SharedChannel> keep;
for (SharedChannel &ch : channels_) {
dump_lines(ch->in(), stdioch->out(), ch->chid());
dump_lines(ch->in(), ch->chid());
if (ch->closed()) {
write_closed_message(ch.get(), stdioch->out());
write_closed_message(ch.get());
} else {
keep.emplace_back(std::move(ch));
}