#pragma once #include "NetObjID.hpp" #include #include #include "../Networking/NetServer.hpp" namespace NetworkingObjects { class NetObjManager; template class NetObjTemporaryPtr; template class NetObjOwnerPtr { public: NetObjOwnerPtr(); NetObjOwnerPtr(const NetObjOwnerPtr& other) = delete; NetObjOwnerPtr(NetObjOwnerPtr&& other); NetObjOwnerPtr& operator=(const NetObjOwnerPtr& other) = delete; NetObjOwnerPtr& operator=(NetObjOwnerPtr&& other); ~NetObjOwnerPtr(); NetObjManager* get_obj_man() const; NetObjID get_net_id() const; T* get() const; std::add_lvalue_reference_t operator*() const requires(!std::is_void_v); T* operator->() const; operator bool() const; bool operator!=(const NetObjOwnerPtr& rhs) const; bool operator==(const NetObjOwnerPtr& rhs) const; bool operator!=(const NetObjTemporaryPtr& rhs) const; bool operator==(const NetObjTemporaryPtr& rhs) const; void send_client_update(const std::string& channel, std::function&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const; void send_server_update_to_client(const std::shared_ptr& clientToSendTo, const std::string& channel, std::function&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const; void send_server_update_to_all_clients_except(const std::shared_ptr& clientToNotSendTo, const std::string& channel, std::function&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const; void send_server_update_to_all_clients(const std::string& channel, std::function&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const; void send_update_to_all(const std::string& channel, std::function&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const; void write_create_message(cereal::PortableBinaryOutputArchive& a) const; private: friend class NetObjManager; template friend class NetObjWeakPtr; template friend class NetObjTemporaryPtr; NetObjOwnerPtr(NetObjManager* initObjMan, NetObjID initID, T* initRawPtr); NetObjManager* objMan; NetObjID id; T* rawPtr; }; }