ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/CGIRenegadeMapSelector/MapSelector.cpp
Revision: 144
Committed: 2003-05-09T00:27:56-07:00 (19 years, 8 months ago) by douglas
File size: 2393 byte(s)
Log Message:
Blah!

File Contents

# Content
1 // Renegade Map Selector
2 //
3 // Douglas Thrift
4 //
5 // MapSelector.cpp
6
7 #include "MapSelector.h"
8 #include <unistd.h>
9 #include <sys/types.h>
10 #include <sys/stat.h>
11 #include <sys/param.h>
12 #include <dirent.h>
13 #include <fcntl.h>
14
15 MapSelector::MapSelector()
16 {
17 session = 0;
18
19 vector<FormEntry> result;
20 if (cgi.getElement("session", result))
21 {
22 session = result[result.size() - 1].getIntegerValue();
23 result.clear();
24 }
25
26 session = load(session);
27 if (debug)
28 {
29 cerr << "session = " << session << "\navailable = {\n";
30
31 for (unsigned index = 0; index < available.size(); index++)
32 {
33 cerr << " [" << index << "] = " << available[index] << "\n";
34 }
35
36 cerr << "}\nselected = {\n";
37
38 for (unsigned index = 0; index < selected.size(); index++)
39 {
40 cerr << " [" << index << "] = " << selected[index] << "\n";
41 }
42
43 cerr << "}\n";
44 }
45
46 string button;
47 if (cgi.getElement("button", result))
48 {
49 button = result[result.size() - 1].getValue();
50 result.clear();
51 }
52
53 select(button);
54 }
55
56 long MapSelector::load(long session)
57 {
58 if (session == 0)
59 {
60 ifstream fin("mapselector.cfg");
61
62 while (fin.good())
63 {
64 string name;
65 string value;
66
67 getline(fin, name, '=');
68 getline(fin, value);
69
70 if (name == "server")
71 {
72 server = value;
73 }
74 else if (name == "config")
75 {
76 ini = value;
77 }
78 else if (name == "template")
79 {
80 html = value;
81 }
82 else if (name == "redirect")
83 {
84 redirect = value;
85 }
86 }
87
88 fin.close();
89
90 long seed;
91
92 int devrandom = open("/dev/urandom", O_RDONLY);
93 read(devrandom, &seed, sizeof (seed));
94 close(devrandom);
95
96 if (debug) cerr << "seed = " << seed << "\n";
97
98 srandom(seed);
99 // srandomdev();
100 session = random();
101
102 DIR* dir = opendir((server + "/data").c_str());
103
104 set<string> files;
105 dirent* file;
106 while ((file = readdir(dir)) != NULL)
107 {
108 string name = file->d_name;
109
110 if (name.rfind(".mix") == name.length() - 4)
111 {
112 files.insert(name);
113 }
114 }
115
116 closedir(dir);
117
118 for (set<string>::iterator itor = files.begin(); itor != files.end();
119 itor++)
120 {
121 available.push_back(*itor);
122 }
123
124 char* dot = new char[MAXPATHLEN];
125 getcwd(dot, MAXPATHLEN);
126
127 chdir(server.c_str());
128
129 config = new RenegadeConfig(ini);
130 config->load();
131
132 selected = config->getMaps();
133
134 chdir(dot);
135 delete [] dot;
136 }
137 else
138 {
139 //
140 }
141
142 return session;
143 }
144
145 void MapSelector::select(const string& button)
146 {
147 //
148 }