From 1a9dcce608e25e66c89a5fbff043ef273b646023 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Sun, 27 Nov 2011 00:26:45 +0100 Subject: [PATCH] Separate agent on_tick and removal, better world consistency --- main.cc | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/main.cc b/main.cc index 8faec93..aad7bbd 100644 --- a/main.cc +++ b/main.cc @@ -48,6 +48,19 @@ main(int argc, char *argv[]) while (true) { std::cout << "tick " << tick_id << '\n'; + /* Drop disconnected agents. */ + + for (std::list::iterator agent = agents.begin(); agent != agents.end(); agent++) + { +next_agent: + if ((*agent)->conn && (*agent)->conn->error) { + delete *agent; + agent = agents.erase(agent); + if (agent != agents.end()) + goto next_agent; + } + } + /* Accept new agents. */ int cfd = accept(lfd, NULL, NULL); @@ -63,18 +76,8 @@ main(int argc, char *argv[]) /* Run on_tick everywhere. */ map.on_tick(); - for (std::list::iterator agent = agents.begin(); agent != agents.end(); agent++) - { -next_agent: (*agent)->on_tick(); - if ((*agent)->conn && (*agent)->conn->error) { - delete *agent; - agent = agents.erase(agent); - if (agent != agents.end()) - goto next_agent; - } - } /* Finish a tick. */