Fixed segfault with ordered list
This commit is contained in:
parent
7d1671229b
commit
5daf1ce6c0
7 changed files with 24 additions and 2 deletions
|
|
@ -12,6 +12,7 @@ CanvasComponentContainer::CanvasComponentContainer() { }
|
|||
|
||||
CanvasComponentContainer::CanvasComponentContainer(NetworkingObjects::NetObjManager& objMan, CanvasComponentType type) {
|
||||
compAllocator = objMan.make_obj_direct<CanvasComponentAllocator>(type);
|
||||
compAllocator->comp->compContainer = this;
|
||||
}
|
||||
|
||||
void CanvasComponentContainer::register_class(NetObjManager& objMan) {
|
||||
|
|
@ -37,6 +38,7 @@ void CanvasComponentContainer::write_constructor_func(const NetworkingObjects::N
|
|||
void CanvasComponentContainer::read_constructor_func(const NetworkingObjects::NetObjTemporaryPtr<CanvasComponentContainer>& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr<NetServer::ClientData>& c) {
|
||||
a(o->coords);
|
||||
o->compAllocator = o.get_obj_man()->read_create_message<CanvasComponentAllocator>(a, c);
|
||||
o->compAllocator->comp->compContainer = o.get();
|
||||
}
|
||||
|
||||
void CanvasComponentContainer::delay_post_assignment_update(DrawingProgram& drawP, CanvasComponent& comp) {
|
||||
|
|
|
|||
|
|
@ -95,6 +95,19 @@ void DrawingProgram::clear_draw_cache() {
|
|||
selection.clear_own_cached_surfaces();
|
||||
}
|
||||
|
||||
void DrawingProgram::write_components_server(cereal::PortableBinaryOutputArchive& a) {
|
||||
components.write_create_message(a);
|
||||
}
|
||||
|
||||
void DrawingProgram::read_components_client(cereal::PortableBinaryInputArchive& a) {
|
||||
components = world.netObjMan.read_create_message<NetworkingObjects::NetObjOrderedList<CanvasComponentContainer>>(a, nullptr);
|
||||
parallel_loop_all_components([&](const auto& c){
|
||||
c->obj->commit_update_dont_invalidate_cache(*this);
|
||||
});
|
||||
compCache.test_rebuild(components->get_data(), true);
|
||||
set_component_list_callbacks();
|
||||
}
|
||||
|
||||
void DrawingProgram::toolbar_gui() {
|
||||
Toolbar& t = world.main.toolbar;
|
||||
t.gui.push_id("Drawing Program Toolbar GUI");
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ class DrawingProgram {
|
|||
void update();
|
||||
void scale_up(const WorldScalar& scaleUpAmount);
|
||||
void draw(SkCanvas* canvas, const DrawData& drawData);
|
||||
void write_components_server(cereal::PortableBinaryOutputArchive& a);
|
||||
void read_components_client(cereal::PortableBinaryInputArchive& a);
|
||||
|
||||
std::unordered_set<ServerClientID> get_used_resources() const;
|
||||
void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version);
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ MainServer::MainServer(World& initWorld, const std::string& serverLocalID):
|
|||
a(CLIENT_INITIAL_DATA, isDirectConnect, newClient.serverID, newClient.cursorColor, newClient.displayName, newClient.camCoords, newClient.windowSize, fileDisplayName, clients, data);
|
||||
world.bMan.bookmarks.write_create_message(a);
|
||||
world.gridMan.grids.write_create_message(a);
|
||||
world.drawProg.write_components_server(a);
|
||||
}
|
||||
netServer->send_string_stream_to_client(client, RELIABLE_COMMAND_CHANNEL, ss);
|
||||
for(auto& [id, rData] : data.resources) {
|
||||
|
|
|
|||
|
|
@ -1246,7 +1246,8 @@ void Toolbar::performance_metrics() {
|
|||
std::stringstream a;
|
||||
a << "FPS: " << std::fixed << std::setprecision(0) << (1.0 / main.deltaTime);
|
||||
gui.text_label(a.str());
|
||||
gui.text_label("Item Count: " + std::to_string(main.world->drawProg.components->size()));
|
||||
if(main.world->drawProg.components)
|
||||
gui.text_label("Item Count: " + std::to_string(main.world->drawProg.components->size()));
|
||||
std::stringstream b;
|
||||
b << "Coord: " << main.world->drawData.cam.c.pos.x().display_int_str(5) << ", " << main.world->drawData.cam.c.pos.y().display_int_str(5);
|
||||
gui.text_label(b.str());
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#include <cereal/types/vector.hpp>
|
||||
#include <Helpers/Networking/NetLibrary.hpp>
|
||||
#include <zstd.h>
|
||||
#include "CanvasComponents/CanvasComponent.hpp"
|
||||
#include "CanvasComponents/CanvasComponentContainer.hpp"
|
||||
#include "CanvasComponents/CanvasComponentAllocator.hpp"
|
||||
|
||||
|
|
@ -86,6 +87,7 @@ void World::init_net_obj_type_list() {
|
|||
NetworkingObjects::register_ordered_list_class<WorldGrid>(netObjMan);
|
||||
CanvasComponentAllocator::register_class(*this, netObjMan);
|
||||
CanvasComponentContainer::register_class(netObjMan);
|
||||
NetworkingObjects::register_ordered_list_class<CanvasComponentContainer>(netObjMan);
|
||||
}
|
||||
|
||||
void World::init_client_callbacks() {
|
||||
|
|
@ -103,9 +105,9 @@ void World::init_client_callbacks() {
|
|||
message(newBackColor);
|
||||
set_canvas_background_color(newBackColor, false);
|
||||
message(canvasScale);
|
||||
//drawProg.initialize_draw_data(message);
|
||||
bMan.bookmarks = netObjMan.read_create_message<NetworkingObjects::NetObjOrderedList<Bookmark>>(message, nullptr);
|
||||
gridMan.grids = netObjMan.read_create_message<NetworkingObjects::NetObjOrderedList<WorldGrid>>(message, nullptr);
|
||||
drawProg.read_components_client(message);
|
||||
}
|
||||
nextClientID = get_max_id(ownID);
|
||||
clientStillConnecting = false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue