6 |
6 |
7 // setup signals |
7 // setup signals |
8 slot_message = session.sig_chan_message(channel_id).connect(this, &NetworkObjectController::on_message); |
8 slot_message = session.sig_chan_message(channel_id).connect(this, &NetworkObjectController::on_message); |
9 } |
9 } |
10 |
10 |
11 |
11 void NetworkObjectController::on_message (NetworkPacket &pkt, NetworkNode *node) { |
12 void NetworkObjectController::on_message (const NetworkPacket &pkt, NetworkNode *node) { |
|
13 uint32_t obj_id = pkt.read_uint32(); |
12 uint32_t obj_id = pkt.read_uint32(); |
14 uint16_t msg_id = pkt.read_uint16(); |
13 uint16_t msg_id = pkt.read_uint16(); |
15 |
14 |
16 // lookup object |
15 // lookup object |
17 NetworkObject *obj = objects[obj_id]; |
16 NetworkObject *obj = objects[obj_id]; |
31 |
30 |
32 NetworkObjectID NetworkObject_ServerController::getObjectID (void) { |
31 NetworkObjectID NetworkObject_ServerController::getObjectID (void) { |
33 return ++id_pool; |
32 return ++id_pool; |
34 } |
33 } |
35 |
34 |
36 void NetworkObject_ServerController::handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *node) { |
35 void NetworkObject_ServerController::handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node) { |
37 // XXX: fail |
36 // XXX: fail |
38 throw CL_Error("clients cannot create objects"); |
37 throw CL_Error("clients cannot create objects"); |
39 } |
38 } |
40 |
39 |
41 NetworkObject_ClientController::NetworkObject_ClientController (NetworkSession &session, NetworkChannelID channel_id, NetworkNode *server) : |
40 NetworkObject_ClientController::NetworkObject_ClientController (NetworkSession &session, NetworkChannelID channel_id, NetworkNode *server) : |
42 NetworkObjectController(session, channel_id), server(server) { |
41 NetworkObjectController(session, channel_id), server(server) { |
43 |
42 |
44 |
43 |
45 } |
44 } |
46 |
45 |
47 void NetworkObject_ClientController::handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *node) { |
46 void NetworkObject_ClientController::handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node) { |
|
47 // we only communicate with the server |
48 assert(node == server); |
48 assert(node == server); |
49 |
49 |
50 // create new object |
50 // create new object |
51 NetworkObject_Client *obj = new NetworkObject_Client(*this, node, obj_id); |
51 NetworkObject_Client *obj = new NetworkObject_Client(*this, node, obj_id); |
52 |
52 |
96 void NetworkObject_Client::send (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable) { |
96 void NetworkObject_Client::send (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable) { |
97 NetworkPacket pkt; |
97 NetworkPacket pkt; |
98 |
98 |
99 buildPacket(pkt, msg_id, pkt); |
99 buildPacket(pkt, msg_id, pkt); |
100 |
100 |
101 node->send(controller.channel_id, pkt, reliable); |
101 controller.server->send(controller.channel_id, pkt, reliable); |
102 } |
102 } |
103 |
103 |