// Renegade Map Selector // // Douglas Thrift // // MapSelector.cpp #include "MapSelector.h" #include #include #include #include #include MapSelector::MapSelector() { session = 0; vector result; if (cgi.getElement("session", result)) { session = result[result.size() - 1].getIntegerValue(); result.clear(); } session = load(session); if (debug) { cerr << "session = " << session << "\navailable = {\n"; for (unsigned index = 0; index < available.size(); index++) { cerr << " [" << index << "] = " << available[index] << "\n"; } cerr << "}\nselected = {\n"; for (unsigned index = 0; index < selected.size(); index++) { cerr << " [" << index << "] = " << selected[index] << "\n"; } cerr << "}\n"; } string button; if (cgi.getElement("button", result)) { button = result[result.size() - 1].getValue(); result.clear(); } select(button); } long MapSelector::load(long session) { if (session == 0) { ifstream fin("mapselector.cfg"); while (fin.good()) { string name; string value; getline(fin, name, '='); getline(fin, value); if (name == "server") { server = value; } else if (name == "config") { ini = value; } else if (name == "template") { html = value; } else if (name == "redirect") { redirect = value; } } fin.close(); srandomdev(); session = random(); DIR* dir = opendir((server + "/data").c_str()); set files; dirent* file; while ((file = readdir(dir)) != NULL) { string name = file->d_name; if (name.rfind(".mix") == name.length() - 4) { files.insert(name); } } closedir(dir); for (set::iterator itor = files.begin(); itor != files.end(); itor++) { available.push_back(*itor); } char* dot = new char[MAXPATHLEN]; getcwd(dot, MAXPATHLEN); chdir(server.c_str()); config = new RenegadeConfig(ini); config->load(); selected = config->getMaps(); chdir(dot); delete [] dot; } else { // } return session; } void MapSelector::select(const string& button) { // }