| 59 | } |
| 60 | |
| 61 | void ResourceManager::init_server_callbacks() { |
| 62 | world.netServer->add_recv_callback(CLIENT_NEW_RESOURCE_ID, [&](std::shared_ptr<NetServer::ClientData> client, cereal::PortableBinaryInputArchive& message) { |
| 63 | NetworkingObjects::NetObjID idBeingRetrieved; |
| 64 | message(idBeingRetrieved); |
| 65 | resourcesBeingRetrieved.emplace(idBeingRetrieved, client); |
| 66 | }); |
| 67 | world.netServer->add_recv_callback(CLIENT_NEW_RESOURCE_DATA, [&](std::shared_ptr<NetServer::ClientData> client, cereal::PortableBinaryInputArchive& message) { |
| 68 | ResourceData newResource; |
| 69 | message(newResource); |
| 70 | auto it = std::find_if(resourcesBeingRetrieved.begin(), resourcesBeingRetrieved.end(), [&client](auto& p) { |
| 71 | return (!p.second.expired() && p.second.lock() == client); |
| 72 | }); |
| 73 | resourceList.emplace_back(world.netObjMan.make_obj_direct_with_specific_id<ResourceData>(it->first, newResource)); |
| 74 | world.netServer->send_items_to_all_clients_except(client, RESOURCE_COMMAND_CHANNEL, SERVER_NEW_RESOURCE_ID, resourceList.back().get_net_id()); |
| 75 | world.netServer->send_items_to_all_clients_except(client, RESOURCE_COMMAND_CHANNEL, SERVER_NEW_RESOURCE_DATA, newResource); |
| 76 | resourcesBeingRetrieved.erase(it); |
| 77 | }); |
| 78 | } |
| 79 | |
| 80 | float ResourceManager::get_resource_retrieval_progress(const NetworkingObjects::NetObjID& id) { |
| 81 | auto resourceClientID = resourcesBeingRetrieved.find(id); |
no test coverage detected