initial commit, lordsawar source, slightly modified
[lordsawar] / src / recently-played-game.cpp
1 //  Copyright (C) 2008, Ben Asselstine
2 //
3 //  This program is free software; you can redistribute it and/or modify
4 //  it under the terms of the GNU General Public License as published by
5 //  the Free Software Foundation; either version 3 of the License, or
6 //  (at your option) any later version.
7 //
8 //  This program is distributed in the hope that it will be useful,
9 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 //  GNU Library General Public License for more details.
12 //
13 //  You should have received a copy of the GNU General Public License
14 //  along with this program; if not, write to the Free Software
15 //  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
16 //  02110-1301, USA.
17
18 //#include <iostream>
19 #include <algorithm>
20 #include <fstream>
21 #include <sstream>
22 #include "recently-played-game.h"
23 #include "playerlist.h"
24 #include "citylist.h"
25 #include "xmlhelper.h"
26
27 std::string RecentlyPlayedGame::d_tag = "recentlyplayedgame";
28
29 //#define debug(x) {cerr<<__FILE__<<": "<<__LINE__<<": "<<x<<endl<<flush;}
30 #define debug(x)
31
32 RecentlyPlayedGame::RecentlyPlayedGame(GameScenario *game_scenario)
33 {
34   d_id = game_scenario->getId();
35   d_time = time(NULL);
36   d_round = game_scenario->getRound();
37   d_number_of_cities = Citylist::getInstance()->size();
38   d_number_of_players = Playerlist::getInstance()->size() - 1;
39   d_playmode = GameScenario::PlayMode(game_scenario->getPlayMode());
40   d_name = game_scenario->getName();
41 }
42
43 RecentlyPlayedGame::RecentlyPlayedGame(XML_Helper* helper)
44 {
45   helper->getData(d_id, "id");
46   guint32 t;
47   helper->getData(t, "time");
48   d_time = t;
49   helper->getData(d_round, "round");
50   helper->getData(d_number_of_cities, "number_of_cities");
51   helper->getData(d_number_of_players, "number_of_players");
52   std::string playmode_str;
53   helper->getData(playmode_str, "playmode");
54   d_playmode = GameScenario::playModeFromString(playmode_str);
55   helper->getData(d_name, "name");
56 }
57
58 RecentlyPlayedGame::~RecentlyPlayedGame()
59 {
60 }
61
62 bool RecentlyPlayedGame::saveContents(XML_Helper *helper) const
63 {
64   bool retval = true;
65   retval &= helper->saveData("id", d_id);
66   guint32 t = d_time;
67   retval &= helper->saveData("time", t);
68   retval &= helper->saveData("round", d_round);
69   retval &= helper->saveData("number_of_cities", d_number_of_cities);
70   retval &= helper->saveData("number_of_players", d_number_of_players);
71   std::string playmode_str = GameScenario::playModeToString(d_playmode);
72   retval &= helper->saveData("playmode", playmode_str);
73   retval &= helper->saveData("name", d_name);
74   retval &= doSave(helper);
75   return retval;
76 }
77
78 RecentlyPlayedGame* RecentlyPlayedGame::handle_load(XML_Helper *helper)
79 {
80   std::string mode_str;
81   helper->getData(mode_str, "playmode");
82   GameScenario::PlayMode mode = GameScenario::playModeFromString(mode_str);
83   switch (mode)
84     {
85     case GameScenario::HOTSEAT:
86       return new RecentlyPlayedHotseatGame(helper);
87     case GameScenario::PLAY_BY_MAIL:
88       return new RecentlyPlayedPbmGame(helper);
89     case GameScenario::NETWORKED:
90       return new RecentlyPlayedNetworkedGame(helper);
91     }
92   return NULL;
93 }
94
95 bool RecentlyPlayedGame::save(XML_Helper* helper) const
96 {
97   bool retval = true;
98   retval &= helper->openTag(RecentlyPlayedGame::d_tag);
99   retval &= saveContents(helper);
100   retval &= helper->closeTag();
101   return retval;
102 }
103
104 //-----------------------------------------------------------------------------
105 //RecentlyPlayedHotseatGame
106
107 RecentlyPlayedHotseatGame::RecentlyPlayedHotseatGame(GameScenario *scen)
108         :RecentlyPlayedGame(scen), d_filename("")
109 {
110 }
111
112 RecentlyPlayedHotseatGame::RecentlyPlayedHotseatGame(XML_Helper *helper)
113         :RecentlyPlayedGame(helper)
114 {
115   helper->getData(d_filename, "filename");
116 }
117
118 RecentlyPlayedHotseatGame::~RecentlyPlayedHotseatGame()
119 {
120 }
121
122 bool RecentlyPlayedHotseatGame::doSave(XML_Helper *helper) const
123 {
124   bool retval = true;
125   retval &= helper->saveData("filename", d_filename);
126   return retval;
127 }
128
129 bool RecentlyPlayedHotseatGame::fillData(std::string filename)
130 {
131   d_filename = filename;
132   return true;
133 }
134
135 //-----------------------------------------------------------------------------
136 //RecentlyPlayedPbmGame
137
138 RecentlyPlayedPbmGame::RecentlyPlayedPbmGame(GameScenario *scen)
139         :RecentlyPlayedGame(scen), d_filename("")
140 {
141 }
142
143 RecentlyPlayedPbmGame::RecentlyPlayedPbmGame(XML_Helper *helper)
144         :RecentlyPlayedGame(helper)
145 {
146   helper->getData(d_filename, "filename");
147 }
148
149 RecentlyPlayedPbmGame::~RecentlyPlayedPbmGame()
150 {
151 }
152
153 bool RecentlyPlayedPbmGame::doSave(XML_Helper *helper) const
154 {
155   bool retval = true;
156   retval &= helper->saveData("filename", d_filename);
157   return retval;
158 }
159
160 bool RecentlyPlayedPbmGame::fillData(std::string filename)
161 {
162   d_filename = filename;
163   return true;
164 }
165
166 //-----------------------------------------------------------------------------
167 //RecentlyPlayedNetworkedGame
168
169 RecentlyPlayedNetworkedGame::RecentlyPlayedNetworkedGame(GameScenario *scen)
170         :RecentlyPlayedGame(scen), d_host(""), d_port(LORDSAWAR_PORT)
171 {
172 }
173
174 RecentlyPlayedNetworkedGame::RecentlyPlayedNetworkedGame(XML_Helper *helper)
175         :RecentlyPlayedGame(helper)
176 {
177   helper->getData(d_host, "host");
178   helper->getData(d_port, "port");
179 }
180
181 RecentlyPlayedNetworkedGame::~RecentlyPlayedNetworkedGame()
182 {
183 }
184
185 bool RecentlyPlayedNetworkedGame::doSave(XML_Helper *helper) const
186 {
187   bool retval = true;
188   retval &= helper->saveData("host", d_host);
189   retval &= helper->saveData("port", d_port);
190   return retval;
191 }
192
193 bool RecentlyPlayedNetworkedGame::fillData(std::string host, guint32 port)
194 {
195   d_host = host;
196   d_port = port;
197   return true;
198 }
199