Fixed comparison operators for net object pointers

This commit is contained in:
Yousef Khadadeh 2025-12-17 15:50:14 +03:00
parent 26d807ce87
commit 4640158343
8 changed files with 62 additions and 18 deletions

View file

@ -25,4 +25,8 @@ namespace NetworkingObjects {
server = initServer;
updateCommandID = initUpdateCommandID;
}
void NetObjManager::disconnect() {
server = nullptr;
client = nullptr;
}
}

View file

@ -23,6 +23,7 @@ namespace NetworkingObjects {
void read_update_message(cereal::PortableBinaryInputArchive& a, const std::shared_ptr<NetServer::ClientData>& clientReceivedFrom);
void set_client(std::shared_ptr<NetClient> initClient, MessageCommandType initUpdateCommandID);
void set_server(std::shared_ptr<NetServer> initServer, MessageCommandType initUpdateCommandID);
void disconnect();
bool is_server() const;
template <typename T> NetObjOwnerPtr<T> read_create_message(cereal::PortableBinaryInputArchive& a, const std::shared_ptr<NetServer::ClientData>& clientReceivedFrom) {
NetObjID id;

View file

@ -21,7 +21,10 @@ namespace NetworkingObjects {
std::add_lvalue_reference_t<T> operator*() const requires(!std::is_void_v<T>);
T* operator->() const;
operator bool() const;
std::strong_ordering operator<=>(const NetObjOwnerPtr<T>& rhs) const;
bool operator!=(const NetObjOwnerPtr<T>& rhs) const;
bool operator==(const NetObjOwnerPtr<T>& rhs) const;
bool operator!=(const NetObjTemporaryPtr<T>& rhs) const;
bool operator==(const NetObjTemporaryPtr<T>& rhs) const;
void send_client_update(const std::string& channel, std::function<void(const NetObjTemporaryPtr<T>&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const;
void send_server_update_to_client(const std::shared_ptr<NetServer::ClientData>& clientToSendTo, const std::string& channel, std::function<void(const NetObjTemporaryPtr<T>&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const;
void send_server_update_to_all_clients_except(const std::shared_ptr<NetServer::ClientData>& clientToNotSendTo, const std::string& channel, std::function<void(const NetObjTemporaryPtr<T>&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const;

View file

@ -64,8 +64,20 @@ namespace NetworkingObjects {
return rawPtr;
}
template <typename T> std::strong_ordering NetObjOwnerPtr<T>::operator<=>(const NetObjOwnerPtr<T>& rhs) const {
return rawPtr <=> rhs.rawPtr;
template <typename T> bool NetObjOwnerPtr<T>::operator!=(const NetObjOwnerPtr<T>& rhs) const {
return rawPtr != rhs.rawPtr;
}
template <typename T> bool NetObjOwnerPtr<T>::operator==(const NetObjOwnerPtr<T>& rhs) const {
return rawPtr == rhs.rawPtr;
}
template <typename T> bool NetObjOwnerPtr<T>::operator!=(const NetObjTemporaryPtr<T>& rhs) const {
return rawPtr != rhs.get();
}
template <typename T> bool NetObjOwnerPtr<T>::operator==(const NetObjTemporaryPtr<T>& rhs) const {
return rawPtr == rhs.get();
}
template <typename T> void NetObjOwnerPtr<T>::send_client_update(const std::string& channel, std::function<void(const NetObjTemporaryPtr<T>&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const {

View file

@ -20,7 +20,10 @@ namespace NetworkingObjects {
std::add_lvalue_reference_t<T> operator*() const requires(!std::is_void_v<T>);
T* operator->() const;
operator bool() const;
std::strong_ordering operator<=>(const NetObjTemporaryPtr<T>& rhs) const;
bool operator!=(const NetObjTemporaryPtr<T>& rhs) const;
bool operator==(const NetObjTemporaryPtr<T>& rhs) const;
bool operator!=(const NetObjOwnerPtr<T>& rhs) const;
bool operator==(const NetObjOwnerPtr<T>& rhs) const;
void send_client_update(const std::string& channel, std::function<void(const NetObjTemporaryPtr<T>&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const;
void send_server_update_to_client(const std::shared_ptr<NetServer::ClientData>& clientToSendTo, const std::string& channel, std::function<void(const NetObjTemporaryPtr<T>&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const;
void send_server_update_to_all_clients_except(const std::shared_ptr<NetServer::ClientData>& clientToNotSendTo, const std::string& channel, std::function<void(const NetObjTemporaryPtr<T>&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const;

View file

@ -57,8 +57,20 @@ namespace NetworkingObjects {
return rawPtr;
}
template <typename T> std::strong_ordering NetObjTemporaryPtr<T>::operator<=>(const NetObjTemporaryPtr<T>& rhs) const {
return rawPtr <=> rhs.rawPtr;
template <typename T> bool NetObjTemporaryPtr<T>::operator!=(const NetObjTemporaryPtr<T>& rhs) const {
return rawPtr != rhs.rawPtr;
}
template <typename T> bool NetObjTemporaryPtr<T>::operator==(const NetObjTemporaryPtr<T>& rhs) const {
return rawPtr == rhs.rawPtr;
}
template <typename T> bool NetObjTemporaryPtr<T>::operator!=(const NetObjOwnerPtr<T>& rhs) const {
return rawPtr != rhs.get();
}
template <typename T> bool NetObjTemporaryPtr<T>::operator==(const NetObjOwnerPtr<T>& rhs) const {
return rawPtr == rhs.get();
}
template <typename T> void NetObjTemporaryPtr<T>::send_client_update(const std::string& channel, std::function<void(const NetObjTemporaryPtr<T>&, cereal::PortableBinaryOutputArchive&)> sendUpdateFunc) const {