5
5
#include " tb_enum/generated/core/tb_enum.json.adapter.h"
6
6
7
7
#include " olink/iclientnode.h"
8
+ #include " olink/core/olinkcontent.h"
8
9
#include " apigear/utilities/logger.h"
9
10
10
11
using namespace Test ::TbEnum;
@@ -19,35 +20,27 @@ EnumInterfaceClient::EnumInterfaceClient()
19
20
: m_publisher(std::make_unique<EnumInterfacePublisher>())
20
21
{}
21
22
22
- void EnumInterfaceClient::applyState (const nlohmann::json& fields)
23
- {
24
- if (fields.contains (" prop0" )) {
25
- setProp0Local (fields[" prop0" ].get <Enum0Enum>());
26
- }
27
- if (fields.contains (" prop1" )) {
28
- setProp1Local (fields[" prop1" ].get <Enum1Enum>());
29
- }
30
- if (fields.contains (" prop2" )) {
31
- setProp2Local (fields[" prop2" ].get <Enum2Enum>());
32
- }
33
- if (fields.contains (" prop3" )) {
34
- setProp3Local (fields[" prop3" ].get <Enum3Enum>());
35
- }
36
- }
37
-
38
- void EnumInterfaceClient::applyProperty (const std::string& propertyName, const nlohmann::json& value)
23
+ void EnumInterfaceClient::applyProperty (const std::string& propertyName, const ApiGear::ObjectLink::OLinkContent& value)
39
24
{
40
25
if ( propertyName == " prop0" ) {
41
- setProp0Local (value.get <Enum0Enum>());
26
+ Enum0Enum value_prop0 {};
27
+ readValue (value, value_prop0);
28
+ setProp0Local (value_prop0);
42
29
}
43
30
else if ( propertyName == " prop1" ) {
44
- setProp1Local (value.get <Enum1Enum>());
31
+ Enum1Enum value_prop1 {};
32
+ readValue (value, value_prop1);
33
+ setProp1Local (value_prop1);
45
34
}
46
35
else if ( propertyName == " prop2" ) {
47
- setProp2Local (value.get <Enum2Enum>());
36
+ Enum2Enum value_prop2 {};
37
+ readValue (value, value_prop2);
38
+ setProp2Local (value_prop2);
48
39
}
49
40
else if ( propertyName == " prop3" ) {
50
- setProp3Local (value.get <Enum3Enum>());
41
+ Enum3Enum value_prop3 {};
42
+ readValue (value, value_prop3);
43
+ setProp3Local (value_prop3);
51
44
}
52
45
}
53
46
@@ -58,7 +51,7 @@ void EnumInterfaceClient::setProp0(Enum0Enum prop0)
58
51
return ;
59
52
}
60
53
static const auto propertyId = ApiGear::ObjectLink::Name::createMemberId (olinkObjectName (), " prop0" );
61
- m_node->setRemoteProperty (propertyId, prop0);
54
+ m_node->setRemoteProperty (propertyId, ApiGear::ObjectLink::propertyToContent ( prop0) );
62
55
}
63
56
64
57
void EnumInterfaceClient::setProp0Local (Enum0Enum prop0)
@@ -81,7 +74,7 @@ void EnumInterfaceClient::setProp1(Enum1Enum prop1)
81
74
return ;
82
75
}
83
76
static const auto propertyId = ApiGear::ObjectLink::Name::createMemberId (olinkObjectName (), " prop1" );
84
- m_node->setRemoteProperty (propertyId, prop1);
77
+ m_node->setRemoteProperty (propertyId, ApiGear::ObjectLink::propertyToContent ( prop1) );
85
78
}
86
79
87
80
void EnumInterfaceClient::setProp1Local (Enum1Enum prop1)
@@ -104,7 +97,7 @@ void EnumInterfaceClient::setProp2(Enum2Enum prop2)
104
97
return ;
105
98
}
106
99
static const auto propertyId = ApiGear::ObjectLink::Name::createMemberId (olinkObjectName (), " prop2" );
107
- m_node->setRemoteProperty (propertyId, prop2);
100
+ m_node->setRemoteProperty (propertyId, ApiGear::ObjectLink::propertyToContent ( prop2) );
108
101
}
109
102
110
103
void EnumInterfaceClient::setProp2Local (Enum2Enum prop2)
@@ -127,7 +120,7 @@ void EnumInterfaceClient::setProp3(Enum3Enum prop3)
127
120
return ;
128
121
}
129
122
static const auto propertyId = ApiGear::ObjectLink::Name::createMemberId (olinkObjectName (), " prop3" );
130
- m_node->setRemoteProperty (propertyId, prop3);
123
+ m_node->setRemoteProperty (propertyId, ApiGear::ObjectLink::propertyToContent ( prop3) );
131
124
}
132
125
133
126
void EnumInterfaceClient::setProp3Local (Enum3Enum prop3)
@@ -164,10 +157,12 @@ std::future<Enum0Enum> EnumInterfaceClient::func0Async(Enum0Enum param0)
164
157
{
165
158
std::promise<Enum0Enum> resultPromise;
166
159
static const auto operationId = ApiGear::ObjectLink::Name::createMemberId (olinkObjectName (), " func0" );
167
- m_node->invokeRemote (operationId,
168
- nlohmann::json::array ({param0}), [&resultPromise](ApiGear::ObjectLink::InvokeReplyArg arg) {
169
- const Enum0Enum& value = arg.value .get <Enum0Enum>();
170
- resultPromise.set_value (value);
160
+ auto args = ApiGear::ObjectLink::argumentsToContent ( param0 );
161
+ m_node->invokeRemote (operationId, args,
162
+ [&resultPromise](ApiGear::ObjectLink::InvokeReplyArg arg) {
163
+ Enum0Enum result{};
164
+ readValue (arg.value , result);
165
+ resultPromise.set_value (result);
171
166
});
172
167
return resultPromise.get_future ().get ();
173
168
}
@@ -195,10 +190,12 @@ std::future<Enum1Enum> EnumInterfaceClient::func1Async(Enum1Enum param1)
195
190
{
196
191
std::promise<Enum1Enum> resultPromise;
197
192
static const auto operationId = ApiGear::ObjectLink::Name::createMemberId (olinkObjectName (), " func1" );
198
- m_node->invokeRemote (operationId,
199
- nlohmann::json::array ({param1}), [&resultPromise](ApiGear::ObjectLink::InvokeReplyArg arg) {
200
- const Enum1Enum& value = arg.value .get <Enum1Enum>();
201
- resultPromise.set_value (value);
193
+ auto args = ApiGear::ObjectLink::argumentsToContent ( param1 );
194
+ m_node->invokeRemote (operationId, args,
195
+ [&resultPromise](ApiGear::ObjectLink::InvokeReplyArg arg) {
196
+ Enum1Enum result{};
197
+ readValue (arg.value , result);
198
+ resultPromise.set_value (result);
202
199
});
203
200
return resultPromise.get_future ().get ();
204
201
}
@@ -226,10 +223,12 @@ std::future<Enum2Enum> EnumInterfaceClient::func2Async(Enum2Enum param2)
226
223
{
227
224
std::promise<Enum2Enum> resultPromise;
228
225
static const auto operationId = ApiGear::ObjectLink::Name::createMemberId (olinkObjectName (), " func2" );
229
- m_node->invokeRemote (operationId,
230
- nlohmann::json::array ({param2}), [&resultPromise](ApiGear::ObjectLink::InvokeReplyArg arg) {
231
- const Enum2Enum& value = arg.value .get <Enum2Enum>();
232
- resultPromise.set_value (value);
226
+ auto args = ApiGear::ObjectLink::argumentsToContent ( param2 );
227
+ m_node->invokeRemote (operationId, args,
228
+ [&resultPromise](ApiGear::ObjectLink::InvokeReplyArg arg) {
229
+ Enum2Enum result{};
230
+ readValue (arg.value , result);
231
+ resultPromise.set_value (result);
233
232
});
234
233
return resultPromise.get_future ().get ();
235
234
}
@@ -257,10 +256,12 @@ std::future<Enum3Enum> EnumInterfaceClient::func3Async(Enum3Enum param3)
257
256
{
258
257
std::promise<Enum3Enum> resultPromise;
259
258
static const auto operationId = ApiGear::ObjectLink::Name::createMemberId (olinkObjectName (), " func3" );
260
- m_node->invokeRemote (operationId,
261
- nlohmann::json::array ({param3}), [&resultPromise](ApiGear::ObjectLink::InvokeReplyArg arg) {
262
- const Enum3Enum& value = arg.value .get <Enum3Enum>();
263
- resultPromise.set_value (value);
259
+ auto args = ApiGear::ObjectLink::argumentsToContent ( param3 );
260
+ m_node->invokeRemote (operationId, args,
261
+ [&resultPromise](ApiGear::ObjectLink::InvokeReplyArg arg) {
262
+ Enum3Enum result{};
263
+ readValue (arg.value , result);
264
+ resultPromise.set_value (result);
264
265
});
265
266
return resultPromise.get_future ().get ();
266
267
}
@@ -272,35 +273,43 @@ std::string EnumInterfaceClient::olinkObjectName()
272
273
return interfaceId;
273
274
}
274
275
275
- void EnumInterfaceClient::olinkOnSignal (const std::string& signalId, const nlohmann::json & args)
276
+ void EnumInterfaceClient::olinkOnSignal (const std::string& signalId, const ApiGear::ObjectLink::OLinkContent & args)
276
277
{
277
278
const auto & signalName = ApiGear::ObjectLink::Name::getMemberName (signalId);
278
- if (signalName == " sig0" ) {
279
- m_publisher->publishSig0 (args[0 ].get <Enum0Enum>());
279
+ ApiGear::ObjectLink::OLinContentStreamReader argumentsReader (args);
280
+ if (signalName == " sig0" ) {Enum0Enum arg_param0 {};
281
+ argumentsReader.read (arg_param0);m_publisher->publishSig0 (arg_param0);
280
282
return ;
281
283
}
282
- if (signalName == " sig1" ) {
283
- m_publisher->publishSig1 (args[ 0 ]. get <Enum1Enum>() );
284
+ if (signalName == " sig1" ) {Enum1Enum arg_param1 {};
285
+ argumentsReader. read (arg_param1); m_publisher->publishSig1 (arg_param1 );
284
286
return ;
285
287
}
286
- if (signalName == " sig2" ) {
287
- m_publisher->publishSig2 (args[ 0 ]. get <Enum2Enum>() );
288
+ if (signalName == " sig2" ) {Enum2Enum arg_param2 {};
289
+ argumentsReader. read (arg_param2); m_publisher->publishSig2 (arg_param2 );
288
290
return ;
289
291
}
290
- if (signalName == " sig3" ) {
291
- m_publisher->publishSig3 (args[ 0 ]. get <Enum3Enum>() );
292
+ if (signalName == " sig3" ) {Enum3Enum arg_param3 {};
293
+ argumentsReader. read (arg_param3); m_publisher->publishSig3 (arg_param3 );
292
294
return ;
293
295
}
294
296
}
295
297
296
- void EnumInterfaceClient::olinkOnPropertyChanged (const std::string& propertyId, const nlohmann::json & value)
298
+ void EnumInterfaceClient::olinkOnPropertyChanged (const std::string& propertyId, const ApiGear::ObjectLink::OLinkContent & value)
297
299
{
298
300
applyProperty (ApiGear::ObjectLink::Name::getMemberName (propertyId), value);
299
301
}
300
- void EnumInterfaceClient::olinkOnInit (const std::string& /* name*/ , const nlohmann::json & props, ApiGear::ObjectLink::IClientNode *node)
302
+ void EnumInterfaceClient::olinkOnInit (const std::string& /* name*/ , const ApiGear::ObjectLink::OLinkContent & props, ApiGear::ObjectLink::IClientNode *node)
301
303
{
302
304
m_node = node;
303
- applyState (props);
305
+ ApiGear::ObjectLink::OLinContentStreamReader reader (props);
306
+ size_t propertyCount = reader.argumentsCount ();
307
+ ApiGear::ObjectLink::InitialProperty currentProperty;
308
+ for (size_t i = 0 ; i < propertyCount; i++)
309
+ {
310
+ reader.read (currentProperty);
311
+ applyProperty (currentProperty.propertyName , currentProperty.propertyValue );
312
+ }
304
313
}
305
314
306
315
void EnumInterfaceClient::olinkOnRelease ()
0 commit comments