mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2025-02-20 15:14:26 +01:00
Added the ability to request a write lock on the tree.
This commit is contained in:
parent
a7b8d0621c
commit
26d161fd26
@ -18,6 +18,8 @@ public:
|
|||||||
NOTIFICATION_CHILD_ADDED = 4,
|
NOTIFICATION_CHILD_ADDED = 4,
|
||||||
NOTIFICATION_CHILD_REMOVED = 5,
|
NOTIFICATION_CHILD_REMOVED = 5,
|
||||||
NOTIFICATION_CHILD_MOVED = 6,
|
NOTIFICATION_CHILD_MOVED = 6,
|
||||||
|
NOTIFICATION_UPDATE = 7,
|
||||||
|
NOTIFICATION_TREE_WRITE_LOCKED = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
bool is_in_tree() const;
|
bool is_in_tree() const;
|
||||||
|
@ -19,8 +19,24 @@ void NodeTree::set_root(Node *root) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeTree::send_update(float delta) {
|
void NodeTree::update() {
|
||||||
// todo
|
if (!_root_node) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_root_node->notification(Node::NOTIFICATION_UPDATE);
|
||||||
|
|
||||||
|
if (_write_lock_requested) {
|
||||||
|
_rw_lock.write_lock();
|
||||||
|
_root_node->notification(Node::NOTIFICATION_TREE_WRITE_LOCKED);
|
||||||
|
_rw_lock.write_unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NodeTree::_send_update() {
|
||||||
|
if (_root_node) {
|
||||||
|
_root_node->notification(Node::NOTIFICATION_UPDATE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeTree::NodeTree() :
|
NodeTree::NodeTree() :
|
||||||
|
@ -13,7 +13,7 @@ public:
|
|||||||
Node *get_root();
|
Node *get_root();
|
||||||
virtual void set_root(Node *root);
|
virtual void set_root(Node *root);
|
||||||
|
|
||||||
virtual void send_update(float delta);
|
virtual void update();
|
||||||
|
|
||||||
void request_write_lock();
|
void request_write_lock();
|
||||||
|
|
||||||
@ -21,8 +21,11 @@ public:
|
|||||||
~NodeTree();
|
~NodeTree();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
virtual void _send_update();
|
||||||
|
|
||||||
Node *_root_node;
|
Node *_root_node;
|
||||||
float _update_interval;
|
float _update_interval;
|
||||||
|
|
||||||
bool _write_lock_requested;
|
bool _write_lock_requested;
|
||||||
RWLock _rw_lock;
|
RWLock _rw_lock;
|
||||||
};
|
};
|
||||||
|
@ -20,7 +20,9 @@ void WebServer::set_root(Node *root) {
|
|||||||
void WebServer::handle_request(Request *request) {
|
void WebServer::handle_request(Request *request) {
|
||||||
ERR_FAIL_COND(!_web_root);
|
ERR_FAIL_COND(!_web_root);
|
||||||
|
|
||||||
|
_rw_lock.read_lock();
|
||||||
_web_root->handle_request_main(request);
|
_web_root->handle_request_main(request);
|
||||||
|
_rw_lock.read_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user