void Process::Run(Game& game) { // ZeroMQ context zmq::context_t zcontext(1); // Components Api api(zcontext, 5555); Notifier notifier(zcontext, 5556); Server server(zcontext, 5557); // TODO: Read workers from file // TODO: Initialize workers properly and distribute players // TODO: Use a worker vector Worker worker; // Game log Log log("match/log"); World* world; if(utils::FileExists("match/world.txt")) { std::ifstream stream("match/world.txt"); // Read existing world world = game.ReadWorld(stream); } else { // TODO: This should be API-driven // Generate a new world world = game.GenerateWorld(); log.Clear(); } // Print current world std::ostringstream stream; world->PrintStructure(stream); debug::Println("MASTER", "Current world:"); debug::Print(stream.str()); // Start servers std::thread api_thread(run_api, std::ref(api), std::ref(worker), std::ref(*world), std::ref(log)); std::thread server_thread(run_server, std::ref(server), std::ref(worker), std::ref(game), std::ref(*world), std::ref(notifier), std::ref(log)); // Run players worker.Run(); // Run game loop run_game_loop(*world, notifier, log); }