From 25c2e26ef8bc4fe6663282190953de25fd747bc5 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Fri, 11 Oct 2024 21:39:55 -0700 Subject: [PATCH] [ntcore] Fix UID collisions between subscribers and multi-sub (#7198) The changes in #7189 caused an ambiguity between multi-subscribers and normal subscribers, because the handle type no longer is sent to the network. Multi-subscribers now go to the network with negative UIDs, normal subscribers are positive UIDs. UID 0 is never used. --- ntcore/src/main/native/cpp/LocalStorage.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ntcore/src/main/native/cpp/LocalStorage.cpp b/ntcore/src/main/native/cpp/LocalStorage.cpp index 72298517ef..494e145309 100644 --- a/ntcore/src/main/native/cpp/LocalStorage.cpp +++ b/ntcore/src/main/native/cpp/LocalStorage.cpp @@ -621,7 +621,7 @@ LocalStorage::SubscriberData* LocalStorage::Impl::AddLocalSubscriber( } if (m_network && !subscriber->config.hidden) { DEBUG4("-> NetworkSubscribe({})", topic->name); - m_network->ClientSubscribe(Handle{subscriber->handle}.GetIndex(), + m_network->ClientSubscribe(1 + Handle{subscriber->handle}.GetIndex(), {{topic->name}}, config); } @@ -650,7 +650,7 @@ LocalStorage::Impl::RemoveLocalSubscriber(NT_Subscriber subHandle) { } } if (m_network && !subscriber->config.hidden) { - m_network->ClientUnsubscribe(Handle{subscriber->handle}.GetIndex()); + m_network->ClientUnsubscribe(1 + Handle{subscriber->handle}.GetIndex()); } } return subscriber; @@ -687,7 +687,7 @@ LocalStorage::MultiSubscriberData* LocalStorage::Impl::AddMultiSubscriber( } if (m_network && !subscriber->options.hidden) { DEBUG4("-> NetworkSubscribe"); - m_network->ClientSubscribe(Handle{subscriber->handle}.GetIndex(), + m_network->ClientSubscribe(-1 - Handle{subscriber->handle}.GetIndex(), subscriber->prefixes, subscriber->options); } return subscriber; @@ -706,7 +706,7 @@ LocalStorage::Impl::RemoveMultiSubscriber(NT_MultiSubscriber subHandle) { } } if (m_network && !subscriber->options.hidden) { - m_network->ClientUnsubscribe(Handle{subscriber->handle}.GetIndex()); + m_network->ClientUnsubscribe(-1 - Handle{subscriber->handle}.GetIndex()); } } return subscriber; @@ -1141,13 +1141,13 @@ void LocalStorage::Impl::StartNetwork(net::ClientMessageHandler* network) { } for (auto&& subscriber : m_subscribers) { if (!subscriber->config.hidden) { - network->ClientSubscribe(Handle{subscriber->handle}.GetIndex(), + network->ClientSubscribe(1 + Handle{subscriber->handle}.GetIndex(), {{subscriber->topic->name}}, subscriber->config); } } for (auto&& subscriber : m_multiSubscribers) { if (!subscriber->options.hidden) { - network->ClientSubscribe(Handle{subscriber->handle}.GetIndex(), + network->ClientSubscribe(-1 - Handle{subscriber->handle}.GetIndex(), subscriber->prefixes, subscriber->options); } }