@@ -100,18 +100,29 @@ namespace Plugin {
100
100
{
101
101
WPEFramework::PluginHost::IShell* controller = builder.controller ();
102
102
const std::string& callsign = builder.callSign ();
103
+ const int retry_count = builder.retryCount ();
104
+ int count = 0 ;
105
+
103
106
if (!controller) {
104
107
LOGERR (" Invalid controller" );
105
108
return nullptr ;
106
109
}
107
110
108
- auto pluginInterface = controller->QueryInterfaceByCallsign <INTERFACE>(callsign.c_str ());
111
+ do {
112
+ auto pluginInterface = controller->QueryInterfaceByCallsign <INTERFACE>(callsign.c_str ());
109
113
110
- if (pluginInterface) {
111
- pluginInterface->AddRef ();
112
- }
114
+ if (pluginInterface) {
115
+ pluginInterface->AddRef ();
116
+ return pluginInterface;
117
+ }
118
+ else
119
+ {
120
+ count++;
121
+ usleep (200 *1000 );
122
+ }
123
+ }while (count < retry_count);
113
124
114
- return pluginInterface ;
125
+ return nullptr ;
115
126
}
116
127
117
128
template <typename T, typename ... Args>
@@ -127,13 +138,15 @@ namespace Plugin {
127
138
PluginHost::IShell* _service;
128
139
uint32_t _version;
129
140
uint32_t _timeout;
141
+ int _retry_count;
130
142
131
143
public:
132
144
PluginInterfaceBuilder (const char * callsign)
133
145
: _callsign(callsign)
134
146
, _service(nullptr )
135
147
, _version(static_cast <uint32_t >(~0 ))
136
148
, _timeout(3000 )
149
+ ,_retry_count(0 )
137
150
{
138
151
}
139
152
@@ -158,6 +171,12 @@ namespace Plugin {
158
171
return *this ;
159
172
}
160
173
174
+ inline PluginInterfaceBuilder& withRetry (int retryCount)
175
+ {
176
+ _retry_count = retryCount;
177
+ return *this ;
178
+ }
179
+
161
180
PluginInterfaceRef<INTERFACE> createInterface ()
162
181
{
163
182
auto * interface = ::WPEFramework::Plugin::createInterface<INTERFACE>(*this );
@@ -170,6 +189,11 @@ namespace Plugin {
170
189
return std::move (PluginInterfaceRef<INTERFACE>(interface, _service));
171
190
}
172
191
192
+ const int retryCount () const
193
+ {
194
+ return _callsign;
195
+ }
196
+
173
197
const std::string& callSign () const
174
198
{
175
199
return _callsign;
0 commit comments