--- a/src/proto2/Application.cc Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/Application.cc Sun Nov 09 20:40:46 2008 +0000
@@ -8,109 +8,109 @@
#include <ClanLib/application.h>
class ArgumentError : public std::exception {
- private:
- const char *message;
-
- public:
- ArgumentError (const std::string &message) : message(message.c_str()) { }
+ private:
+ const char *message;
+
+ public:
+ ArgumentError (const std::string &message) : message(message.c_str()) { }
- virtual const char* what() const throw() {
- return message;
- }
+ virtual const char* what() const throw() {
+ return message;
+ }
};
class Main : public CL_ClanApplication {
- private:
- // arguments
- CL_CommandLine args;
-
- std::string arg_port;
- bool arg_dedicated;
- std::string arg_connect;
-
- void parse_args (int argc, char **argv) {
- // set up the options
- args.add_option('p', "port", "PORT", "set network port used", true);
- args.add_option('D', "dedicated", "", "act as a network server", true);
- args.add_option('c', "connect", "SERVERHOST", "act as a network client", true);
-
- // set defaults
- arg_port = NETWORK_PORT_STR;
- arg_dedicated = false;
- arg_connect = "";
-
- try {
- // parse args
- args.parse_args(argc, argv);
- } catch (CL_Error &e) {
- throw ArgumentError(e.message);
- }
-
- while (args.next()) {
- switch (args.get_key()) {
- case 'p':
- arg_port = args.get_argument();
- break;
-
- case 'D':
- arg_dedicated = true;
- break;
-
- case 'c':
- arg_connect = args.get_argument();
- break;
-
- case CL_CommandLine::REST_ARG:
- throw ArgumentError(args.get_argument());
-
- default:
- throw ArgumentError(std::string(1, (char) args.get_key()));
+ private:
+ // arguments
+ CL_CommandLine args;
- }
- }
-
- // check for valid combinations of arugments
- if (arg_dedicated && !arg_connect.empty())
- throw ArgumentError("-D and -c are mutually exclusive");
-
- if (!arg_dedicated && arg_connect.empty())
- throw ArgumentError("nothing to do");
- }
+ std::string arg_port;
+ bool arg_dedicated;
+ std::string arg_connect;
- public:
- virtual int main (int argc, char **argv) {
- // initialize core
- CL_SetupCore setup_core;
-
- try {
- // parse arugments
- parse_args(argc, argv);
-
- // run engine based on args
- if (arg_dedicated) {
- Engine::runNetworkServer(arg_port);
+ void parse_args (int argc, char **argv) {
+ // set up the options
+ args.add_option('p', "port", "PORT", "set network port used", true);
+ args.add_option('D', "dedicated", "", "act as a network server", true);
+ args.add_option('c', "connect", "SERVERHOST", "act as a network client", true);
- } else if (!arg_connect.empty()) {
- Engine::runNetworkClient(arg_connect, arg_port);
-
- } else
- assert(false);
-
- // succesful return
- return 0;
-
- } catch (ArgumentError &e) {
- std::cerr << e.what() << std::endl;
- args.print_help();
+ // set defaults
+ arg_port = NETWORK_PORT_STR;
+ arg_dedicated = false;
+ arg_connect = "";
+
+ try {
+ // parse args
+ args.parse_args(argc, argv);
+ } catch (CL_Error &e) {
+ throw ArgumentError(e.message);
+ }
- // XXX: handle --help
- return 1;
+ while (args.next()) {
+ switch (args.get_key()) {
+ case 'p':
+ arg_port = args.get_argument();
+ break;
- } catch (std::exception &e) {
- std::cerr << e.what() << std::endl;
+ case 'D':
+ arg_dedicated = true;
+ break;
- return 1;
- }
- }
+ case 'c':
+ arg_connect = args.get_argument();
+ break;
+
+ case CL_CommandLine::REST_ARG:
+ throw ArgumentError(args.get_argument());
+
+ default:
+ throw ArgumentError(std::string(1, (char) args.get_key()));
+
+ }
+ }
+
+ // check for valid combinations of arugments
+ if (arg_dedicated && !arg_connect.empty())
+ throw ArgumentError("-D and -c are mutually exclusive");
+
+ if (!arg_dedicated && arg_connect.empty())
+ throw ArgumentError("nothing to do");
+ }
+
+ public:
+ virtual int main (int argc, char **argv) {
+ // initialize core
+ CL_SetupCore setup_core;
+
+ try {
+ // parse arugments
+ parse_args(argc, argv);
+
+ // run engine based on args
+ if (arg_dedicated) {
+ Engine::runNetworkServer(arg_port);
+
+ } else if (!arg_connect.empty()) {
+ Engine::runNetworkClient(arg_connect, arg_port);
+
+ } else
+ assert(false);
+
+ // succesful return
+ return 0;
+
+ } catch (ArgumentError &e) {
+ std::cerr << e.what() << std::endl;
+ args.print_help();
+
+ // XXX: handle --help
+ return 1;
+
+ } catch (std::exception &e) {
+ std::cerr << e.what() << std::endl;
+
+ return 1;
+ }
+ }
} app;
--- a/src/proto2/Dimension.cc Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/Dimension.cc Sun Nov 09 20:40:46 2008 +0000
@@ -1,14 +1,14 @@
#include "Dimension.hh"
std::ostream& operator<< (std::ostream &s, const Coordinate &c) {
- s << "(" << c.x << ", " << c.y << ")";
+ s << "(" << c.x << ", " << c.y << ")";
- return s;
+ return s;
}
std::ostream& operator<< (std::ostream &s, const PositionDelta &c) {
- s << "(" << c.dx << ", " << c.dy << ")";
+ s << "(" << c.dx << ", " << c.dy << ")";
- return s;
+ return s;
}
--- a/src/proto2/Dimension.hh Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/Dimension.hh Sun Nov 09 20:40:46 2008 +0000
@@ -4,44 +4,44 @@
#include <iostream>
class Dimension {
- public:
- uint32_t width;
- uint32_t height;
+ public:
+ uint32_t width;
+ uint32_t height;
- Dimension (uint32_t width, uint32_t height) : width(width), height(height) { }
+ Dimension (uint32_t width, uint32_t height) : width(width), height(height) { }
};
class PositionDelta {
- public:
- uint32_t dx;
- uint32_t dy;
+ public:
+ uint32_t dx;
+ uint32_t dy;
- PositionDelta (uint32_t dx, uint32_t dy) : dx(dx), dy(dy) { }
+ PositionDelta (uint32_t dx, uint32_t dy) : dx(dx), dy(dy) { }
};
class Coordinate {
- public:
- uint32_t x;
- uint32_t y;
-
- Coordinate (uint32_t x, uint32_t y) : x(x), y(y) { }
-
- Coordinate &operator+= (const PositionDelta &d) {
- this->x += d.dx;
- this->y += d.dy;
+ public:
+ uint32_t x;
+ uint32_t y;
- return *this;
- }
+ Coordinate (uint32_t x, uint32_t y) : x(x), y(y) { }
- uint32_t scaledX() {
- // Scale the coordinate so that it
- // matches the pixel resolution
- return this->x/1;
- }
+ Coordinate &operator+= (const PositionDelta &d) {
+ this->x += d.dx;
+ this->y += d.dy;
- uint32_t scaledY() {
- return this->y/1;
- }
+ return *this;
+ }
+
+ uint32_t scaledX() {
+ // Scale the coordinate so that it
+ // matches the pixel resolution
+ return this->x/1;
+ }
+
+ uint32_t scaledY() {
+ return this->y/1;
+ }
};
std::ostream& operator<< (std::ostream &s, const Coordinate &c);
--- a/src/proto2/Engine.cc Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/Engine.cc Sun Nov 09 20:40:46 2008 +0000
@@ -11,65 +11,65 @@
}
void Engine::runNetworkServer (const std::string &listen_port) {
- // the engine
- Engine engine;
-
- // setup network
- CL_SetupNetwork setup_network;
+ // the engine
+ Engine engine;
+
+ // setup network
+ CL_SetupNetwork setup_network;
- try {
- // create the server
- engine.net_server = new NetworkServer(engine.game_state, listen_port);
+ try {
+ // create the server
+ engine.net_server = new NetworkServer(engine.game_state, listen_port);
- // run the main loop
- engine.main_loop();
-
- } catch (CL_Error &e) {
- std::cerr << "NetworkServer::main: CL_Error:" << e.message << std::endl;
+ // run the main loop
+ engine.main_loop();
+
+ } catch (CL_Error &e) {
+ std::cerr << "NetworkServer::main: CL_Error:" << e.message << std::endl;
- throw;
- }
+ throw;
+ }
}
void Engine::runNetworkClient (const std::string &connect_host, const std::string &connect_port) {
- // the engine
- Engine engine;
-
- // setup network
- CL_SetupNetwork setup_network;
-
- // connect_to
- CL_IPAddress connect_addr(connect_host, connect_port);
+ // the engine
+ Engine engine;
+
+ // setup network
+ CL_SetupNetwork setup_network;
- try {
- // create the server
- engine.net_client = new NetworkClient(engine.game_state, connect_addr);
+ // connect_to
+ CL_IPAddress connect_addr(connect_host, connect_port);
- // run the main loop
- engine.main_loop();
-
- } catch (CL_Error &e) {
- std::cerr << "NetworkServer::main: CL_Error:" << e.message << std::endl;
+ try {
+ // create the server
+ engine.net_client = new NetworkClient(engine.game_state, connect_addr);
- throw;
- }
+ // run the main loop
+ engine.main_loop();
+
+ } catch (CL_Error &e) {
+ std::cerr << "NetworkServer::main: CL_Error:" << e.message << std::endl;
+
+ throw;
+ }
}
void Engine::main_loop (void) {
- while (is_running) {
- // this does.... magical things
- CL_System::keep_alive();
+ while (is_running) {
+ // this does.... magical things
+ CL_System::keep_alive();
- // if I can't find some better way to do this in ClanLib by next thursday, then it f*%!ing sucks
- // ideally, we should be able to have a main loop that does timed waits on I/O, fufilling some set of timers
- // but as far as I can tell, ClanLib doesn't have anything like that
- CL_System::sleep(100);
+ // if I can't find some better way to do this in ClanLib by next thursday, then it f*%!ing sucks
+ // ideally, we should be able to have a main loop that does timed waits on I/O, fufilling some set of timers
+ // but as far as I can tell, ClanLib doesn't have anything like that
+ CL_System::sleep(100);
- }
+ }
}
Logger Engine::log (enum LogLevel level, const char *type) {
- return Logger(level <= WARN ? std::cerr : std::cout, level, type);
+ return Logger(level <= WARN ? std::cerr : std::cout, level, type);
}
--- a/src/proto2/Engine.hh Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/Engine.hh Sun Nov 09 20:40:46 2008 +0000
@@ -5,28 +5,29 @@
#include "Logger.hh"
class Engine {
- private:
- // game state
- GameState game_state;
-
- // network server/client
- NetworkServer *net_server;
- NetworkClient *net_client;
+ private:
+ // game state
+ GameState game_state;
+
+ // network server/client
+ NetworkServer *net_server;
+ NetworkClient *net_client;
- // to exit the mainloop
- bool is_running;
-
- // default constructor
- Engine (void);
+ // to exit the mainloop
+ bool is_running;
+
+ // default constructor
+ Engine (void);
- public:
- static void runNetworkServer (const std::string &listen_port);
- static void runNetworkClient (const std::string &connect_host, const std::string &connect_port);
-
- static Logger log (enum LogLevel level, const char *type);
+ public:
+ static void runNetworkServer (const std::string &listen_port);
+ static void runNetworkClient (const std::string &connect_host, const std::string &connect_port);
+
+ // logging utility
+ static Logger log (enum LogLevel level, const char *type);
- private:
- void main_loop (void);
+ private:
+ void main_loop (void);
};
--- a/src/proto2/GameState.hh Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/GameState.hh Sun Nov 09 20:40:46 2008 +0000
@@ -7,8 +7,8 @@
#include <stdexcept>
enum PlayerType {
- PLAYER_LOCAL,
- PLAYER_REMOTE
+ PLAYER_LOCAL,
+ PLAYER_REMOTE
};
#define PLAYER_DIM_W 10
@@ -17,79 +17,79 @@
#define MAP_DIM_H 640
class Player {
- protected:
- Coordinate position;
-
- public:
-
- Player(Coordinate c, bool visible) : position(c), dimensions(PLAYER_DIM_W, PLAYER_DIM_H), visible(visible) {}
+ protected:
+ Coordinate position;
- PlayerType type;
- Dimension dimensions;
- bool visible;
+ public:
- Coordinate getPosition (void) const {
- return this->position;
- }
-
- protected:
- void updatePosition (Coordinate p) {
- this->position = p;
- }
+ Player(Coordinate c, bool visible) : position(c), dimensions(PLAYER_DIM_W, PLAYER_DIM_H), visible(visible) {}
+
+ PlayerType type;
+ Dimension dimensions;
+ bool visible;
+
+ Coordinate getPosition (void) const {
+ return this->position;
+ }
+
+ protected:
+ void updatePosition (Coordinate p) {
+ this->position = p;
+ }
};
class LocalPlayer : public Player {
- protected:
- LocalPlayer (Coordinate c, bool visible) : Player(c, visible) { }
-
- public:
- virtual void move (PositionDelta d) {
- this->position += d;
- }
+ protected:
+ LocalPlayer (Coordinate c, bool visible) : Player(c, visible) { }
+
+ public:
+ virtual void move (PositionDelta d) {
+ this->position += d;
+ }
};
class RemotePlayer : public Player {
- protected:
- RemotePlayer (Coordinate c, bool visible) : Player(c, visible) { }
+ protected:
+ RemotePlayer (Coordinate c, bool visible) : Player(c, visible) { }
};
class GameState {
- public:
- Dimension map_dimensions;
- std::list<Player*> player_list;
-
- // only one local player is supported
- LocalPlayer *local_player;
-
- GameState (void) : map_dimensions(MAP_DIM_W, MAP_DIM_H), local_player(NULL) {
-
- }
+ public:
+ Dimension map_dimensions;
+ std::list<Player*> player_list;
- LocalPlayer &getLocalPlayer (void) {
- if (!local_player)
- throw std::logic_error("getLocalPlayer called with no local player");
-
- return *local_player;
- }
-
- void newLocalPlayer (LocalPlayer *player) {
- if (local_player)
- throw std::logic_error("newLocalPlayer called even though we already have a local player");
+ // only one local player is supported
+ LocalPlayer *local_player;
- player_list.push_back(player);
-
- local_player = player;
- }
+ GameState (void) : map_dimensions(MAP_DIM_W, MAP_DIM_H), local_player(NULL) {
- void newRemotePlayer (RemotePlayer *player) {
- player_list.push_back(player);
- }
+ }
- void removePlayer (Player *player) {
- player_list.remove(player);
- }
+ LocalPlayer &getLocalPlayer (void) {
+ if (!local_player)
+ throw std::logic_error("getLocalPlayer called with no local player");
+
+ return *local_player;
+ }
+
+ void newLocalPlayer (LocalPlayer *player) {
+ if (local_player)
+ throw std::logic_error("newLocalPlayer called even though we already have a local player");
+
+ player_list.push_back(player);
+
+ local_player = player;
+ }
+
+ void newRemotePlayer (RemotePlayer *player) {
+ player_list.push_back(player);
+ }
+
+ void removePlayer (Player *player) {
+ player_list.remove(player);
+ }
};
#endif
--- a/src/proto2/Logger.cc Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/Logger.cc Sun Nov 09 20:40:46 2008 +0000
@@ -2,39 +2,39 @@
#include "Logger.hh"
Logger::Logger (std::ostream &stream, enum LogLevel level, const char *module) : stream(stream), level(level), module(module) {
- const char *l;
+ const char *l;
- switch (level) {
- case FATAL: l = "FATAL"; break;
- case ERROR: l = "ERROR"; break;
- case WARN: l = "WARN"; break;
- case INFO: l = "INFO"; break;
- case DEBUG: l = "DEBUG"; break;
- default: l = "???"; break;
- };
+ switch (level) {
+ case FATAL: l = "FATAL"; break;
+ case ERROR: l = "ERROR"; break;
+ case WARN: l = "WARN"; break;
+ case INFO: l = "INFO"; break;
+ case DEBUG: l = "DEBUG"; break;
+ default: l = "???"; break;
+ };
- stream << l << " [" << module << "] ";
+ stream << l << " [" << module << "] ";
}
Logger::~Logger (void) {
- stream << std::endl;
+ stream << std::endl;
}
std::ostream& operator<< (std::ostream &s, CL_NetComputer &c) {
- s << "[" << c.get_address().get_address() << ":" << c.get_address().get_port() << "]";
+ s << "[" << c.get_address().get_address() << ":" << c.get_address().get_port() << "]";
- return s;
+ return s;
}
std::ostream& operator<< (std::ostream &s, CL_NetObject_Server &obj) {
- s << "%" << obj.get_obj_id();
+ s << "%" << obj.get_obj_id();
- return s;
+ return s;
}
std::ostream& operator<< (std::ostream &s, CL_NetObject_Client &obj) {
- s << "%" << obj.get_obj_id();
+ s << "%" << obj.get_obj_id();
- return s;
+ return s;
}
--- a/src/proto2/Logger.hh Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/Logger.hh Sun Nov 09 20:40:46 2008 +0000
@@ -6,30 +6,30 @@
#include <iostream>
enum LogLevel {
- FATAL,
- ERROR,
- WARN,
- INFO,
- DEBUG,
+ FATAL,
+ ERROR,
+ WARN,
+ INFO,
+ DEBUG,
};
class Logger {
- private:
- std::ostream &stream;
- enum LogLevel level;
- const char *module;
+ private:
+ std::ostream &stream;
+ enum LogLevel level;
+ const char *module;
- public:
- Logger (std::ostream &stream, enum LogLevel level, const char *module);
+ public:
+ Logger (std::ostream &stream, enum LogLevel level, const char *module);
- template <typename T> Logger& operator<< (T &val) {
- stream << val;
+ template <typename T> Logger& operator<< (T &val) {
+ stream << val;
- return *this;
- }
+ return *this;
+ }
- ~Logger (void);
+ ~Logger (void);
};
std::ostream& operator<< (std::ostream &s, CL_NetComputer &c);
--- a/src/proto2/Network.hh Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/Network.hh Sun Nov 09 20:40:46 2008 +0000
@@ -7,67 +7,67 @@
#include <ClanLib/network.h>
class NetworkCore {
- protected:
- GameState &state;
-
- CL_SlotContainer slots;
+ protected:
+ GameState &state;
- CL_NetSession netsession;
+ CL_SlotContainer slots;
- CL_NetObject_Controller netobjs;
-
- // constructor
- NetworkCore (GameState &state) : state(state), netsession(NETWORK_APP_NAME), netobjs(&netsession, NETWORK_NETOBJ_CHAN) { }
+ CL_NetSession netsession;
+
+ CL_NetObject_Controller netobjs;
+
+ // constructor
+ NetworkCore (GameState &state) : state(state), netsession(NETWORK_APP_NAME), netobjs(&netsession, NETWORK_NETOBJ_CHAN) { }
};
enum NetworkMessage {
- NETMSG_PACKET_INVALID = 0x00,
-
- /*
- * You have joined the game:
- *
- * uint32_t x
- * uint32_t y
- */
- NETMSG_SERVER_HELLO = 0x0100,
-
- /*
- * New client has connected to server:
- *
- * uint32_t x
- * uint32_t y
- */
- NETMSG_PLAYER_JOIN = 0x0101,
+ NETMSG_PACKET_INVALID = 0x00,
- /*
- * Client has left server:
- *
- */
- NETMSG_PLAYER_QUIT = 0x0102,
+ /*
+ * You have joined the game:
+ *
+ * uint32_t x
+ * uint32_t y
+ */
+ NETMSG_SERVER_HELLO = 0x0100,
- /*
- * Client has moved
- *
- * uint32_t dx
- * uint32_t dy
- */
- NETMSG_CLIENT_MOVE = 0x0201,
-
- /*
- * Initial player info
- *
- * uint32_t x
- * uint32_t y
- */
- NETMSG_PLAYER_INFO = 0x0300,
+ /*
+ * New client has connected to server:
+ *
+ * uint32_t x
+ * uint32_t y
+ */
+ NETMSG_PLAYER_JOIN = 0x0101,
- /*
- * Player position update
- *
- * uint32_t x
- * uint32_t y
- */
- NETMSG_PLAYER_POSITION = 0x0301,
+ /*
+ * Client has left server:
+ *
+ */
+ NETMSG_PLAYER_QUIT = 0x0102,
+
+ /*
+ * Client has moved
+ *
+ * uint32_t dx
+ * uint32_t dy
+ */
+ NETMSG_CLIENT_MOVE = 0x0201,
+
+ /*
+ * Initial player info
+ *
+ * uint32_t x
+ * uint32_t y
+ */
+ NETMSG_PLAYER_INFO = 0x0300,
+
+ /*
+ * Player position update
+ *
+ * uint32_t x
+ * uint32_t y
+ */
+ NETMSG_PLAYER_POSITION = 0x0301,
};
#endif
--- a/src/proto2/NetworkClient.cc Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/NetworkClient.cc Sun Nov 09 20:40:46 2008 +0000
@@ -4,144 +4,144 @@
#include "Logger.hh"
NetworkClient::NetworkClient (GameState &state, const CL_IPAddress &connect_to) :
- NetworkCore(state), server(netsession.connect(connect_to)) {
-
- // connect slots
- slots.connect(netobjs.sig_create_object(), this, &NetworkClient::on_create_object);
+ NetworkCore(state), server(netsession.connect(connect_to)) {
+
+ // connect slots
+ slots.connect(netobjs.sig_create_object(), this, &NetworkClient::on_create_object);
- // XXX: sig_disconnected
+ // XXX: sig_disconnected
}
void NetworkClient::on_create_object (CL_NetObject_Client &obj, int msg_type, CL_NetPacket &pkt) {
- switch (msg_type) {
- case NETMSG_SERVER_HELLO:
- on_server_hello(obj, pkt);
-
- break;
-
- case NETMSG_PLAYER_INFO:
- on_player_info(obj, pkt);
+ switch (msg_type) {
+ case NETMSG_SERVER_HELLO:
+ on_server_hello(obj, pkt);
- break;
-
- case NETMSG_PLAYER_JOIN:
- on_player_join(obj, pkt);
+ break;
+
+ case NETMSG_PLAYER_INFO:
+ on_player_info(obj, pkt);
- break;
+ break;
+
+ case NETMSG_PLAYER_JOIN:
+ on_player_join(obj, pkt);
- default:
- Engine::log(WARN, "client.on_create_object") << "unknown msg_type=" << msg_type << " for obj=" << obj;
- }
+ break;
+
+ default:
+ Engine::log(WARN, "client.on_create_object") << "unknown msg_type=" << msg_type << " for obj=" << obj;
+ }
}
-
+
void NetworkClient::on_server_hello (CL_NetObject_Client &obj, CL_NetPacket &pkt) {
- // read the packet
- uint32_t x = pkt.input.read_uint32();
- uint32_t y = pkt.input.read_uint32();
+ // read the packet
+ uint32_t x = pkt.input.read_uint32();
+ uint32_t y = pkt.input.read_uint32();
- Coordinate initial_position(x, y);
-
- Engine::log(INFO, "client.on_server_hello") << "obj=" << obj << ", pos=" << initial_position;
+ Coordinate initial_position(x, y);
+
+ Engine::log(INFO, "client.on_server_hello") << "obj=" << obj << ", pos=" << initial_position;
- // create the LocalPlayer object
- NetworkClientLocalPlayer *player = new NetworkClientLocalPlayer(*this, obj, initial_position);
+ // create the LocalPlayer object
+ NetworkClientLocalPlayer *player = new NetworkClientLocalPlayer(*this, obj, initial_position);
- // inform state
- state.newLocalPlayer(player);
+ // inform state
+ state.newLocalPlayer(player);
}
-
+
void NetworkClient::on_player_info (CL_NetObject_Client &obj, CL_NetPacket &pkt) {
- // read the packet
- uint32_t x = pkt.input.read_uint32();
- uint32_t y = pkt.input.read_uint32();
-
- Coordinate initial_position(x, y);
-
- Engine::log(INFO, "client.on_player_info") << "obj=" << obj << ", pos=" << initial_position;
+ // read the packet
+ uint32_t x = pkt.input.read_uint32();
+ uint32_t y = pkt.input.read_uint32();
+
+ Coordinate initial_position(x, y);
+
+ Engine::log(INFO, "client.on_player_info") << "obj=" << obj << ", pos=" << initial_position;
- // create the LocalPlayer object
- NetworkClientRemotePlayer *player = new NetworkClientRemotePlayer(*this, obj, initial_position);
+ // create the LocalPlayer object
+ NetworkClientRemotePlayer *player = new NetworkClientRemotePlayer(*this, obj, initial_position);
- // inform state
- state.newRemotePlayer(player);
+ // inform state
+ state.newRemotePlayer(player);
}
-
+
void NetworkClient::on_player_join (CL_NetObject_Client &obj, CL_NetPacket &pkt) {
- // read the packet
- uint32_t x = pkt.input.read_uint32();
- uint32_t y = pkt.input.read_uint32();
-
- Coordinate initial_position(x, y);
-
- Engine::log(INFO, "client.on_player_join") << "obj=" << obj << ", pos=" << initial_position;
-
- // create the RemotePlayer object
- NetworkClientRemotePlayer *player = new NetworkClientRemotePlayer(*this, obj, initial_position);
+ // read the packet
+ uint32_t x = pkt.input.read_uint32();
+ uint32_t y = pkt.input.read_uint32();
+
+ Coordinate initial_position(x, y);
+
+ Engine::log(INFO, "client.on_player_join") << "obj=" << obj << ", pos=" << initial_position;
+
+ // create the RemotePlayer object
+ NetworkClientRemotePlayer *player = new NetworkClientRemotePlayer(*this, obj, initial_position);
- // inform state
- state.newRemotePlayer(player);
+ // inform state
+ state.newRemotePlayer(player);
}
-
+
void NetworkClient::player_quit (NetworkClientRemotePlayer *player) {
- // inform state
- state.removePlayer(player);
+ // inform state
+ state.removePlayer(player);
- // delete
- // XXX: leak because deleting the slot while it's being called breaks ClanLib
- // delete player;
+ // delete
+ // XXX: leak because deleting the slot while it's being called breaks ClanLib
+ // delete player;
}
NetworkClientLocalPlayer::NetworkClientLocalPlayer (NetworkClient &client, CL_NetObject_Client &obj, Coordinate initial_position) :
- LocalPlayer(initial_position, true), client(client), obj(obj) {
-
- // receive messages
- slots.connect(obj.sig_received_message(NETMSG_PLAYER_POSITION), this, &NetworkClientLocalPlayer::on_position);
+ LocalPlayer(initial_position, true), client(client), obj(obj) {
+
+ // receive messages
+ slots.connect(obj.sig_received_message(NETMSG_PLAYER_POSITION), this, &NetworkClientLocalPlayer::on_position);
}
-
+
void NetworkClientLocalPlayer::move (PositionDelta d) {
- CL_NetPacket pkt;
- pkt.output.write_uint32(d.dx);
- pkt.output.write_uint32(d.dy);
+ CL_NetPacket pkt;
+ pkt.output.write_uint32(d.dx);
+ pkt.output.write_uint32(d.dy);
- obj.send(NETMSG_CLIENT_MOVE, pkt, false);
+ obj.send(NETMSG_CLIENT_MOVE, pkt, false);
}
-
+
void NetworkClientLocalPlayer::on_position (CL_NetPacket &pkt) {
- uint32_t x = pkt.input.read_uint32();
- uint32_t y = pkt.input.read_uint32();
-
- Coordinate pos (x, y);
+ uint32_t x = pkt.input.read_uint32();
+ uint32_t y = pkt.input.read_uint32();
- Engine::log(INFO, "client_player.on_position") << "obj=" << obj << ", pos=" << pos;
-
- updatePosition(pos);
+ Coordinate pos (x, y);
+
+ Engine::log(INFO, "client_player.on_position") << "obj=" << obj << ", pos=" << pos;
+
+ updatePosition(pos);
}
-
+
NetworkClientRemotePlayer::NetworkClientRemotePlayer (NetworkClient &client, CL_NetObject_Client &obj, Coordinate initial_position) :
- RemotePlayer(initial_position, true), client(client), obj(obj) {
-
- // receive messages
- slots.connect(obj.sig_received_message(NETMSG_PLAYER_POSITION), this, &NetworkClientRemotePlayer::on_position);
- slots.connect(obj.sig_received_message(NETMSG_PLAYER_QUIT), this, &NetworkClientRemotePlayer::on_quit);
+ RemotePlayer(initial_position, true), client(client), obj(obj) {
+
+ // receive messages
+ slots.connect(obj.sig_received_message(NETMSG_PLAYER_POSITION), this, &NetworkClientRemotePlayer::on_position);
+ slots.connect(obj.sig_received_message(NETMSG_PLAYER_QUIT), this, &NetworkClientRemotePlayer::on_quit);
}
void NetworkClientRemotePlayer::on_position (CL_NetPacket &pkt) {
- uint32_t x = pkt.input.read_uint32();
- uint32_t y = pkt.input.read_uint32();
-
- Coordinate pos (x, y);
+ uint32_t x = pkt.input.read_uint32();
+ uint32_t y = pkt.input.read_uint32();
+
+ Coordinate pos (x, y);
- Engine::log(INFO, "client_player.on_position") << "obj=" << obj << ", pos=" << pos;
-
- updatePosition(pos);
+ Engine::log(INFO, "client_player.on_position") << "obj=" << obj << ", pos=" << pos;
+
+ updatePosition(pos);
}
void NetworkClientRemotePlayer::on_quit (CL_NetPacket &pkt) {
- // pkt is empty
- (void) pkt;
+ // pkt is empty
+ (void) pkt;
- Engine::log(INFO, "client_player.on_quit") << "obj=" << obj;
+ Engine::log(INFO, "client_player.on_quit") << "obj=" << obj;
- client.player_quit(this);
+ client.player_quit(this);
}
--- a/src/proto2/NetworkClient.hh Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/NetworkClient.hh Sun Nov 09 20:40:46 2008 +0000
@@ -8,55 +8,55 @@
class NetworkClientRemotePlayer;
class NetworkClient : public NetworkCore {
- private:
- CL_NetComputer server;
-
- public:
- NetworkClient (GameState &state, const CL_IPAddress &connect_to);
+ private:
+ CL_NetComputer server;
+
+ public:
+ NetworkClient (GameState &state, const CL_IPAddress &connect_to);
- private:
- void on_create_object (CL_NetObject_Client &obj, int msg_type, CL_NetPacket &pkt);
+ private:
+ void on_create_object (CL_NetObject_Client &obj, int msg_type, CL_NetPacket &pkt);
- void on_server_hello (CL_NetObject_Client &obj, CL_NetPacket &pkt);
- void on_player_info (CL_NetObject_Client &obj, CL_NetPacket &pkt);
- void on_player_join (CL_NetObject_Client &obj, CL_NetPacket &pkt);
-
- public:
- void player_quit (NetworkClientRemotePlayer *player);
+ void on_server_hello (CL_NetObject_Client &obj, CL_NetPacket &pkt);
+ void on_player_info (CL_NetObject_Client &obj, CL_NetPacket &pkt);
+ void on_player_join (CL_NetObject_Client &obj, CL_NetPacket &pkt);
+
+ public:
+ void player_quit (NetworkClientRemotePlayer *player);
};
class NetworkClientLocalPlayer : public LocalPlayer {
- private:
- NetworkClient &client;
-
- CL_SlotContainer slots;
-
- CL_NetObject_Client obj;
+ private:
+ NetworkClient &client;
- public:
- NetworkClientLocalPlayer (NetworkClient &client, CL_NetObject_Client &obj, Coordinate initial_position);
-
- virtual void move (PositionDelta d);
-
- private:
- void on_position (CL_NetPacket &pkt);
+ CL_SlotContainer slots;
+
+ CL_NetObject_Client obj;
+
+ public:
+ NetworkClientLocalPlayer (NetworkClient &client, CL_NetObject_Client &obj, Coordinate initial_position);
+
+ virtual void move (PositionDelta d);
+
+ private:
+ void on_position (CL_NetPacket &pkt);
};
class NetworkClientRemotePlayer : public RemotePlayer {
- private:
- NetworkClient &client;
-
- CL_SlotContainer slots;
-
- CL_NetObject_Client obj;
+ private:
+ NetworkClient &client;
+
+ CL_SlotContainer slots;
- public:
- NetworkClientRemotePlayer (NetworkClient &client, CL_NetObject_Client &obj, Coordinate initial_position);
-
- private:
- void on_position (CL_NetPacket &pkt);
+ CL_NetObject_Client obj;
- void on_quit (CL_NetPacket &pkt);
+ public:
+ NetworkClientRemotePlayer (NetworkClient &client, CL_NetObject_Client &obj, Coordinate initial_position);
+
+ private:
+ void on_position (CL_NetPacket &pkt);
+
+ void on_quit (CL_NetPacket &pkt);
};
#endif
--- a/src/proto2/NetworkServer.cc Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/NetworkServer.cc Sun Nov 09 20:40:46 2008 +0000
@@ -5,119 +5,119 @@
#include <cassert>
NetworkServer::NetworkServer (GameState &state, const std::string &listen_port) :
- NetworkCore(state), pid_pool(0) {
-
- // connect slots
- slots.connect(netsession.sig_computer_connected(), this, &NetworkServer::on_connect);
- slots.connect(netsession.sig_computer_disconnected(), this, &NetworkServer::on_disconnect);
-
- // and then we listen
- netsession.start_listen(listen_port);
+ NetworkCore(state), pid_pool(0) {
+
+ // connect slots
+ slots.connect(netsession.sig_computer_connected(), this, &NetworkServer::on_connect);
+ slots.connect(netsession.sig_computer_disconnected(), this, &NetworkServer::on_disconnect);
+
+ // and then we listen
+ netsession.start_listen(listen_port);
- Engine::log(INFO, "server") << "running, listen_port=" << listen_port;
+ Engine::log(INFO, "server") << "running, listen_port=" << listen_port;
}
void NetworkServer::on_connect (CL_NetComputer &computer) {
- // assign a pid
- uint16_t pid = ++pid_pool;
-
- // create the player object (it logs it)
- NetworkServerPlayer *player = new NetworkServerPlayer(*this, computer, pid);
-
- // map computer to it
- players[computer] = player;
+ // assign a pid
+ uint16_t pid = ++pid_pool;
+
+ // create the player object (it logs it)
+ NetworkServerPlayer *player = new NetworkServerPlayer(*this, computer, pid);
+
+ // map computer to it
+ players[computer] = player;
- // add to GameState
- state.newRemotePlayer(player);
+ // add to GameState
+ state.newRemotePlayer(player);
}
void NetworkServer::on_disconnect (CL_NetComputer &computer) {
- NetworkServerPlayer *player = players[computer];
-
- // remove from players
- players.erase(computer);
-
- // remove from state
- state.removePlayer(player);
-
- // remove from game
- player->disconnected();
-
- // delete
- delete player;
-}
-
-NetworkServerPlayer::NetworkServerPlayer (NetworkServer &server, CL_NetComputer &computer, uint16_t pid) :
- RemotePlayer(Coordinate(0, 0), true), server(server), computer(computer), obj(&server.netobjs), pid(pid) {
-
- // log
- Engine::log(INFO, "server_player.connected") << "computer=" << computer << ", obj=" << obj;
+ NetworkServerPlayer *player = players[computer];
+
+ // remove from players
+ players.erase(computer);
- // messages
- slots.connect(obj.sig_received_message(NETMSG_CLIENT_MOVE), this, &NetworkServerPlayer::on_move);
-
- // the initial NETMSG_PLAYER_HELLO
- CL_NetPacket hello_pkt;
- hello_pkt.output.write_uint32(position.x);
- hello_pkt.output.write_uint32(position.y);
-
- obj.send(computer, NETMSG_SERVER_HELLO, hello_pkt, true);
+ // remove from state
+ state.removePlayer(player);
- // send other player objects
- for (std::map<CL_NetComputer, NetworkServerPlayer*>::iterator it = server.players.begin(); it != server.players.end(); it++) {
- NetworkServerPlayer *player = it->second;
- CL_NetPacket player_pkt;
-
- // player is not in players list yet
- assert(player != this);
+ // remove from game
+ player->disconnected();
- player_pkt.output.write_uint32(player->position.x);
- player_pkt.output.write_uint32(player->position.y);
+ // delete
+ delete player;
+}
+
+NetworkServerPlayer::NetworkServerPlayer (NetworkServer &server, CL_NetComputer &computer, uint16_t pid) :
+ RemotePlayer(Coordinate(0, 0), true), server(server), computer(computer), obj(&server.netobjs), pid(pid) {
+
+ // log
+ Engine::log(INFO, "server_player.connected") << "computer=" << computer << ", obj=" << obj;
- player->obj.send(computer, NETMSG_PLAYER_INFO, player_pkt, true);
- }
+ // messages
+ slots.connect(obj.sig_received_message(NETMSG_CLIENT_MOVE), this, &NetworkServerPlayer::on_move);
+
+ // the initial NETMSG_PLAYER_HELLO
+ CL_NetPacket hello_pkt;
+ hello_pkt.output.write_uint32(position.x);
+ hello_pkt.output.write_uint32(position.y);
+
+ obj.send(computer, NETMSG_SERVER_HELLO, hello_pkt, true);
+
+ // send other player objects
+ for (std::map<CL_NetComputer, NetworkServerPlayer*>::iterator it = server.players.begin(); it != server.players.end(); it++) {
+ NetworkServerPlayer *player = it->second;
+ CL_NetPacket player_pkt;
+
+ // player is not in players list yet
+ assert(player != this);
+
+ player_pkt.output.write_uint32(player->position.x);
+ player_pkt.output.write_uint32(player->position.y);
+
+ player->obj.send(computer, NETMSG_PLAYER_INFO, player_pkt, true);
+ }
- // broadcast NETMSG_PLAYER_JOIN to all clients
- obj.send(server.netsession.get_all(), NETMSG_PLAYER_JOIN, hello_pkt, true);
+ // broadcast NETMSG_PLAYER_JOIN to all clients
+ obj.send(server.netsession.get_all(), NETMSG_PLAYER_JOIN, hello_pkt, true);
}
void NetworkServerPlayer::disconnected (void) {
- CL_NetPacket pkt;
-
- Engine::log(INFO, "server_player.disconnected") << "computer=" << computer << ", obj=" << obj;
+ CL_NetPacket pkt;
+
+ Engine::log(INFO, "server_player.disconnected") << "computer=" << computer << ", obj=" << obj;
- obj.send(server.netsession.get_all(), NETMSG_PLAYER_QUIT, pkt, true);
+ obj.send(server.netsession.get_all(), NETMSG_PLAYER_QUIT, pkt, true);
}
void NetworkServerPlayer::on_move (CL_NetComputer &from, CL_NetPacket &pkt) {
- // sanity-check
- if (!(from == computer))
- return;
-
- // read packet
- uint32_t dx = pkt.input.read_uint32();
- uint32_t dy = pkt.input.read_uint32();
-
- // movement delta
- PositionDelta delta(dx, dy);
-
- Engine::log(INFO, "server_player.on_move") << "obj=" << obj << ", old_pos=" << position << ", delta=" << delta;
+ // sanity-check
+ if (!(from == computer))
+ return;
+
+ // read packet
+ uint32_t dx = pkt.input.read_uint32();
+ uint32_t dy = pkt.input.read_uint32();
- // apply movement
- position += delta;
+ // movement delta
+ PositionDelta delta(dx, dy);
- // send position update
- send_position_update();
+ Engine::log(INFO, "server_player.on_move") << "obj=" << obj << ", old_pos=" << position << ", delta=" << delta;
+
+ // apply movement
+ position += delta;
+
+ // send position update
+ send_position_update();
}
-
+
void NetworkServerPlayer::send_position_update (void) {
- CL_NetPacket pkt;
- pkt.output.write_uint32(position.x);
- pkt.output.write_uint32(position.y);
+ CL_NetPacket pkt;
+ pkt.output.write_uint32(position.x);
+ pkt.output.write_uint32(position.y);
- Engine::log(INFO, "server_player.send_position_update") << "obj=" << obj << " -> " << position;
+ Engine::log(INFO, "server_player.send_position_update") << "obj=" << obj << " -> " << position;
- obj.send(server.netsession.get_all(), NETMSG_PLAYER_POSITION, pkt, false);
+ obj.send(server.netsession.get_all(), NETMSG_PLAYER_POSITION, pkt, false);
}
--- a/src/proto2/NetworkServer.hh Sat Nov 08 21:25:56 2008 +0000
+++ b/src/proto2/NetworkServer.hh Sun Nov 09 20:40:46 2008 +0000
@@ -12,43 +12,43 @@
class NetworkServerPlayer;
class NetworkServer : public NetworkCore {
- friend class NetworkServerPlayer;
-
- private:
- uint16_t pid_pool;
-
- public:
- std::map<CL_NetComputer, NetworkServerPlayer*> players;
+ friend class NetworkServerPlayer;
- public:
- NetworkServer (GameState &state, const std::string &listen_port);
+ private:
+ uint16_t pid_pool;
+
+ public:
+ std::map<CL_NetComputer, NetworkServerPlayer*> players;
- private:
- void on_connect (CL_NetComputer &computer);
- void on_disconnect (CL_NetComputer &computer);
+ public:
+ NetworkServer (GameState &state, const std::string &listen_port);
-
+ private:
+ void on_connect (CL_NetComputer &computer);
+ void on_disconnect (CL_NetComputer &computer);
+
+
};
class NetworkServerPlayer : public RemotePlayer {
- private:
- NetworkServer &server;
- CL_NetComputer &computer;
- CL_NetObject_Server obj;
-
- CL_SlotContainer slots;
+ private:
+ NetworkServer &server;
+ CL_NetComputer &computer;
+ CL_NetObject_Server obj;
- uint16_t pid;
-
- public:
- NetworkServerPlayer (NetworkServer &server, CL_NetComputer &computer, uint16_t pid);
+ CL_SlotContainer slots;
- void disconnected (void);
+ uint16_t pid;
+
+ public:
+ NetworkServerPlayer (NetworkServer &server, CL_NetComputer &computer, uint16_t pid);
- private:
- void on_move (CL_NetComputer &from, CL_NetPacket &pkt);
+ void disconnected (void);
- void send_position_update (void);
+ private:
+ void on_move (CL_NetComputer &from, CL_NetPacket &pkt);
+
+ void send_position_update (void);
};
#endif
--- a/src/proto2/Protocol.hh Sat Nov 08 21:25:56 2008 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-#ifndef PROTOCOL_HH
-#define PROTOCOL_HH
-
-#endif