#pragma once #include "NetObjID.hpp" #include #include #include "NetObjOwnerPtr.decl.hpp" #include "../Networking/NetServer.hpp" namespace NetworkingObjects { class NetObjManager; template class NetObjTemporaryPtr { public: NetObjTemporaryPtr(); NetObjTemporaryPtr(const NetObjTemporaryPtr& other); NetObjTemporaryPtr(const NetObjOwnerPtr& owner); NetObjTemporaryPtr& operator=(const NetObjTemporaryPtr& other); template NetObjTemporaryPtr cast() const; 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 NetObjTemporaryPtr& rhs) const; bool operator==(const NetObjTemporaryPtr& rhs) const; bool operator!=(const NetObjOwnerPtr& rhs) const; bool operator==(const NetObjOwnerPtr& 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; NetObjTemporaryPtr(NetObjManager* initObjMan, NetObjID initID, T* initRawPtr); NetObjManager* objMan; NetObjID id; T* rawPtr; }; }