| 57 | } |
| 58 | |
| 59 | void ClientData::register_class(World& world) { |
| 60 | world.netObjMan.register_class<ClientData, ClientData, ClientData, ClientData>({ |
| 61 | .writeConstructorFuncClient = default_serialize_write_func<ClientData>, |
| 62 | .readConstructorFuncClient = default_serialize_read_constructor_func<ClientData>, |
| 63 | .readUpdateFuncClient = [&world](const NetObjTemporaryPtr<ClientData>& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr<NetServer::ClientData>&) { |
| 64 | ClientDataCommand command; |
| 65 | a(command); |
| 66 | switch(command) { |
| 67 | case ClientDataCommand::SET_CURSOR_POS: |
| 68 | a(o->cursorPos); |
| 69 | break; |
| 70 | case ClientDataCommand::SET_WINDOW_SIZE: |
| 71 | a(o->windowSize); |
| 72 | break; |
| 73 | case ClientDataCommand::SET_CAM_COORDS: |
| 74 | a(o->camCoords); |
| 75 | break; |
| 76 | case ClientDataCommand::SEND_CHAT_MESSAGE: { |
| 77 | std::string chatMessage; |
| 78 | a(chatMessage); |
| 79 | world.add_chat_message(o->displayName, chatMessage, Toolbar::ChatMessage::Type::NORMAL); |
| 80 | break; |
| 81 | } |
| 82 | case ClientDataCommand::SET_GRID_SIZE: { |
| 83 | a(o->gridSize); |
| 84 | if(o != world.ownClientData) { |
| 85 | if(world.ownClientData->gridSize < o->gridSize) { |
| 86 | world.scale_up(get_canvas_scale_up_amount(o->gridSize, world.ownClientData->gridSize)); |
| 87 | world.ownClientData->gridSize = o->gridSize; |
| 88 | world.ownClientData.send_update_to_all(RELIABLE_COMMAND_CHANNEL, [](const NetObjTemporaryPtr<ClientData>& o, cereal::PortableBinaryOutputArchive & a) { |
| 89 | a(ClientDataCommand::SET_GRID_SIZE, o->gridSize); |
| 90 | }); |
| 91 | } |
| 92 | } |
| 93 | break; |
| 94 | } |
| 95 | } |
| 96 | }, |
| 97 | .writeConstructorFuncServer = default_serialize_write_func<ClientData>, |
| 98 | .readConstructorFuncServer = default_serialize_read_constructor_func<ClientData>, |
| 99 | .readUpdateFuncServer = [&world](const NetObjTemporaryPtr<ClientData>& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr<NetServer::ClientData>& c) { |
| 100 | ClientDataCommand command; |
| 101 | a(command); |
| 102 | switch(command) { |
| 103 | case ClientDataCommand::SET_CURSOR_POS: |
| 104 | a(o->cursorPos); |
| 105 | o.send_server_update_to_all_clients_except(c, UNRELIABLE_COMMAND_CHANNEL, [](const NetObjTemporaryPtr<ClientData>& o, cereal::PortableBinaryOutputArchive & a) { |
| 106 | a(ClientDataCommand::SET_CURSOR_POS, o->cursorPos); |
| 107 | }); |
| 108 | break; |
| 109 | case ClientDataCommand::SET_WINDOW_SIZE: |
| 110 | a(o->windowSize); |
| 111 | o.send_server_update_to_all_clients_except(c, RELIABLE_COMMAND_CHANNEL, [](const NetObjTemporaryPtr<ClientData>& o, cereal::PortableBinaryOutputArchive & a) { |
| 112 | a(ClientDataCommand::SET_WINDOW_SIZE, o->windowSize); |
| 113 | }); |
| 114 | break; |
| 115 | case ClientDataCommand::SET_CAM_COORDS: |
| 116 | a(o->camCoords); |
nothing calls this directly
no test coverage detected