Skip to content

Commit 2906079

Browse files
Fix ALMemory subscription code
1 parent d480501 commit 2906079

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ set(
4444
TOOLS_SRC
4545
src/tools/robot_description.cpp
4646
src/tools/from_any_value.cpp
47+
src/tools/subscribe_almemory.cpp
4748
)
4849

4950
set(

src/tools/subscribe_almemory.cpp

+11-11
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace naoqi
99
* This implementation works for NAOqi 2.8 and higher only, using a recent
1010
* libqi.
1111
*/
12-
class QiALMemorySubscriber : ALMemorySubscriber
12+
class QiALMemorySubscriber : public ALMemorySubscriber
1313
{
1414
public:
1515
QiALMemorySubscriber(qi::AnyObject subscriber, qi::SignalLink link_id)
@@ -22,16 +22,16 @@ class QiALMemorySubscriber : ALMemorySubscriber
2222
int link_id = _link_id.swap(0);
2323
if (link_id == 0)
2424
{
25-
return;
25+
return qi::Future<void>(nullptr);
2626
}
2727

28-
_subscriber->disconnect(link_id).value();
28+
return _subscriber.disconnect(link_id);
2929
}
3030

3131
private:
3232
qi::AnyObject _subscriber;
3333
qi::Atomic<qi::SignalLink> _link_id;
34-
}
34+
};
3535

3636
/**
3737
* Subscribes to an ALMemory event by registering a service with a callback.
@@ -40,7 +40,7 @@ class QiALMemorySubscriber : ALMemorySubscriber
4040
* This implementation is the only one compatible when connecting to NAOqi 2.5
4141
* from a recent libqi.
4242
*/
43-
class LegacyALMemorySubscriber : ALMemorySubscriber
43+
class LegacyALMemorySubscriber : public ALMemorySubscriber
4444
{
4545
public:
4646
LegacyALMemorySubscriber(qi::SessionPtr session, int service_id)
@@ -53,16 +53,16 @@ class LegacyALMemorySubscriber : ALMemorySubscriber
5353
int service_id = _service_id.swap(0);
5454
if (service_id == 0)
5555
{
56-
return;
56+
return qi::Future<void>(nullptr);
5757
}
5858

59-
_session->unregisterService(service_id).value();
59+
return _session->unregisterService(service_id);
6060
}
6161

6262
private:
6363
qi::SessionPtr _session;
6464
qi::Atomic<int> _service_id;
65-
}
65+
};
6666

6767
/**
6868
* A service dedicated to receive ALMemory events and forward them to an
@@ -77,7 +77,7 @@ class ALMemorySubscriberService
7777
}
7878

7979
void onEvent(const std::string& /*key*/, const qi::AnyValue& value,
80-
const AL::ALValue& /* message */)
80+
const qi::AnyValue& /* message */)
8181
{
8282
_callback(value);
8383
}
@@ -96,7 +96,7 @@ subscribe(const robot::NaoqiVersion& naoqi_version, qi::SessionPtr session,
9696
const std::string& key, std::function<void(qi::AnyValue)> callback)
9797
{
9898
auto memory = session->service("ALMemory").value();
99-
if (helpers::driver::isNaoqiVersionLesser(naoqi_version_, 2, 8))
99+
if (helpers::driver::isNaoqiVersionLesser(naoqi_version, 2, 8))
100100
{
101101
// Create one service per subscription.
102102
auto subscriber_service =
@@ -116,7 +116,7 @@ subscribe(const robot::NaoqiVersion& naoqi_version, qi::SessionPtr session,
116116
}
117117
else
118118
{
119-
auto qi_subscriber = memory->subscribe(key).value();
119+
auto qi_subscriber = memory.call<qi::AnyObject>("subscribe", key);
120120
auto signal_link =
121121
qi_subscriber.connect("signal", std::move(callback)).value();
122122
return std::make_unique<QiALMemorySubscriber>(std::move(qi_subscriber),

0 commit comments

Comments
 (0)