diff -r 25becd2cb026 -r 0738f2949a2b src/NetworkObject.cc --- a/src/NetworkObject.cc Wed Dec 03 19:16:32 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ - -#include - -#include "NetworkObject.hh" - -/* - * NetworkObject_Controller - */ -NetworkObjectController::NetworkObjectController (NetworkSession &session, NetworkChannelID channel_id) : - session(session), channel_id(channel_id) { - - // setup signals - slot_message = session.sig_chan_message(channel_id).connect(this, &NetworkObjectController::on_message); -} - -void NetworkObjectController::on_message (NetworkPacket &pkt, NetworkNode *node) { - uint32_t obj_id = pkt.read_uint32(); - uint16_t msg_id = pkt.read_uint16(); - - // lookup object - NetworkObject *obj = objects[obj_id]; - - if (obj) { - obj->handle_packet(node, msg_id, pkt); - - } else { - handle_create(obj_id, msg_id, pkt, node); - } -} - -/* - * NetworkObject_ServerController - */ -NetworkObject_ServerController::NetworkObject_ServerController (NetworkSession &session, NetworkChannelID channel_id) : - NetworkObjectController(session, channel_id), id_pool(0) { - -} - -NetworkObjectID NetworkObject_ServerController::getObjectID (void) { - return ++id_pool; -} - -void NetworkObject_ServerController::handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node) { - (void) obj_id; - (void) msg_id; - (void) pkt; - (void) node; - - // XXX: fail - throw CL_Error("clients cannot create objects"); -} - -/* - * NetworkObject_ClientController * - */ -NetworkObject_ClientController::NetworkObject_ClientController (NetworkSession &session, NetworkChannelID channel_id, NetworkNode *server) : - NetworkObjectController(session, channel_id), server(server) { - - -} - -void NetworkObject_ClientController::handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node) { - // we only communicate with the server - assert(node == server); - - // create new object - NetworkObject_Client *obj = new NetworkObject_Client(*this, obj_id); - - // signal - _sig_create(obj, msg_id, pkt); -} - -/* - * NetworkObject - */ -NetworkObject::NetworkObject (NetworkObjectController &controller, NetworkObjectID obj_id) : - obj_id(obj_id) { - - assert(obj_id); - - controller.objects[obj_id] = this; -} - -void NetworkObject::buildPacket (NetworkPacket &pkt, NetworkMessageID msg_id, const NetworkPacket &payload) { - pkt.write_uint32(obj_id); - pkt.write_uint16(msg_id); - pkt.write_packet(payload); -} - -std::ostream& operator<< (std::ostream &s, const NetworkObject &obj) { - return s << ""; -} - -/* - * NetworkObject_Server - */ -NetworkObject_Server::NetworkObject_Server (NetworkObject_ServerController &controller) : - NetworkObject(controller, controller.getObjectID()), controller(controller) { - -} - -void NetworkObject_Server::handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt) { - _map_sig_message[msg_id](node, pkt); -} - -void NetworkObject_Server::send_to (NetworkNode *dst, NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable) { - NetworkPacket pkt_out; - - buildPacket(pkt_out, msg_id, pkt); - - dst->send(controller.channel_id, pkt_out, reliable); -} - -void NetworkObject_Server::send_all (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable) { - send_all_except(msg_id, pkt, NULL, reliable); -} - -void NetworkObject_Server::send_all_except (NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *black_sheep, bool reliable) { - NetworkPacket pkt_out; - - buildPacket(pkt_out, msg_id, pkt); - - controller.session.send_all_except(controller.channel_id, pkt_out, black_sheep, reliable); -} - -/* - * NetworkObject_Client - */ -NetworkObject_Client::NetworkObject_Client (NetworkObject_ClientController &controller, NetworkObjectID id) : - NetworkObject(controller, id), controller(controller) { - - // nothing -} - -void NetworkObject_Client::handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt) { - assert(node == controller.server); - - _map_sig_message[msg_id](pkt); -} - -void NetworkObject_Client::send (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable) { - NetworkPacket pkt_out; - - buildPacket(pkt_out, msg_id, pkt); - - controller.server->send(controller.channel_id, pkt_out, reliable); -} -