19
19
import android .content .Intent ;
20
20
import android .content .SharedPreferences ;
21
21
import android .os .Bundle ;
22
+ import android .text .TextUtils ;
22
23
import android .util .Log ;
23
24
24
25
import com .espressif .cloudapi .ApiManager ;
25
26
import com .espressif .cloudapi .ApiResponseListener ;
26
27
import com .espressif .db .EspDatabase ;
28
+ import com .espressif .mdns .mDNSApiManager ;
27
29
import com .espressif .mdns .mDNSDevice ;
30
+ import com .espressif .mdns .mDNSManager ;
28
31
import com .espressif .provisioning .ESPProvisionManager ;
29
32
import com .espressif .rainmaker .BuildConfig ;
30
33
import com .espressif .ui .activities .MainActivity ;
34
37
import com .espressif .ui .models .UpdateEvent ;
35
38
36
39
import org .greenrobot .eventbus .EventBus ;
40
+ import org .json .JSONException ;
41
+ import org .json .JSONObject ;
37
42
38
43
import java .util .HashMap ;
39
44
@@ -50,6 +55,7 @@ public class EspApplication extends Application {
50
55
51
56
private SharedPreferences appPreferences ;
52
57
private ApiManager apiManager ;
58
+ private mDNSManager mdnsManager ;
53
59
54
60
public enum AppState {
55
61
NO_USER_LOGIN ,
@@ -71,6 +77,9 @@ public void onCreate() {
71
77
appPreferences = getSharedPreferences (AppConstants .ESP_PREFERENCES , Context .MODE_PRIVATE );
72
78
apiManager = ApiManager .getInstance (this );
73
79
ESPProvisionManager .getInstance (this );
80
+ if (BuildConfig .isLocalControlSupported ) {
81
+ mdnsManager = mDNSManager .getInstance (getApplicationContext (), AppConstants .MDNS_SERVICE_TYPE , listener );
82
+ }
74
83
}
75
84
76
85
public AppState getAppState () {
@@ -81,6 +90,9 @@ public void changeAppState(AppState newState, Bundle extras) {
81
90
82
91
switch (newState ) {
83
92
case GETTING_DATA :
93
+ if (BuildConfig .isLocalControlSupported ) {
94
+ mdnsManager .initializeNsd ();
95
+ }
84
96
case REFRESH_DATA :
85
97
if (!appState .equals (newState )) {
86
98
appState = newState ;
@@ -96,6 +108,7 @@ public void changeAppState(AppState newState, Bundle extras) {
96
108
updateEvent .setData (extras );
97
109
}
98
110
EventBus .getDefault ().post (updateEvent );
111
+ startLocalDeviceDiscovery ();
99
112
break ;
100
113
101
114
case NO_USER_LOGIN :
@@ -111,6 +124,7 @@ public void changeAppState(AppState newState, Bundle extras) {
111
124
case NO_INTERNET :
112
125
appState = newState ;
113
126
EventBus .getDefault ().post (new UpdateEvent (AppConstants .UpdateEventType .EVENT_STATE_CHANGE_UPDATE ));
127
+ startLocalDeviceDiscovery ();
114
128
break ;
115
129
}
116
130
}
@@ -168,6 +182,15 @@ public void refreshData() {
168
182
}
169
183
}
170
184
185
+ public void loginSuccess () {
186
+ EspDatabase .getInstance (this ).getNodeDao ().deleteAll ();
187
+ EspDatabase .getInstance (this ).getGroupDao ().deleteAll ();
188
+ nodeMap .clear ();
189
+ scheduleMap .clear ();
190
+ mDNSDeviceMap .clear ();
191
+ groupMap .clear ();
192
+ }
193
+
171
194
public void logout () {
172
195
// Do logout and clear all data
173
196
if (!ApiManager .isOAuthLogin ) {
@@ -208,4 +231,119 @@ public void onNetworkFailure(Exception exception) {
208
231
Log .e (TAG , "Deleted all things from local storage." );
209
232
changeAppState (AppState .NO_USER_LOGIN , null );
210
233
}
234
+
235
+ private void startLocalDeviceDiscovery () {
236
+ if (BuildConfig .isLocalControlSupported ) {
237
+ if (nodeMap .size () > 0 ) {
238
+ mdnsManager .discoverServices ();
239
+ }
240
+ }
241
+ }
242
+
243
+ public void stopLocalDeviceDiscovery () {
244
+ if (BuildConfig .isLocalControlSupported ) {
245
+ mdnsManager .stopDiscovery ();
246
+ }
247
+ }
248
+
249
+ mDNSManager .mDNSEvenListener listener = new mDNSManager .mDNSEvenListener () {
250
+
251
+ @ Override
252
+ public void deviceFound (final mDNSDevice dnsDevice ) {
253
+
254
+ Log .e (TAG , "Device Found on Local Network" );
255
+ final String url = "http://" + dnsDevice .getIpAddr () + ":" + dnsDevice .getPort ();
256
+ final mDNSApiManager dnsMsgHelper = new mDNSApiManager (getApplicationContext ());
257
+
258
+ dnsMsgHelper .getPropertyCount (url , AppConstants .LOCAL_CONTROL_PATH , new ApiResponseListener () {
259
+
260
+ @ Override
261
+ public void onSuccess (Bundle data ) {
262
+
263
+ if (data != null ) {
264
+
265
+ int count = data .getInt (AppConstants .KEY_PROPERTY_COUNT , 0 );
266
+ dnsDevice .setPropertyCount (count );
267
+
268
+ dnsMsgHelper .getPropertyValues (url , AppConstants .LOCAL_CONTROL_PATH , count , new ApiResponseListener () {
269
+
270
+ @ Override
271
+ public void onSuccess (Bundle data ) {
272
+
273
+ if (data != null ) {
274
+
275
+ String configData = data .getString (AppConstants .KEY_CONFIG );
276
+ String paramsData = data .getString (AppConstants .KEY_PARAMS );
277
+
278
+ Log .d (TAG , "Config data : " + configData );
279
+ Log .d (TAG , "Params data : " + paramsData );
280
+
281
+ if (!TextUtils .isEmpty (configData )) {
282
+
283
+ JSONObject configJson = null ;
284
+ try {
285
+ configJson = new JSONObject (configData );
286
+ } catch (JSONException e ) {
287
+ e .printStackTrace ();
288
+ }
289
+
290
+ String nodeId = configJson .optString (AppConstants .KEY_NODE_ID );
291
+ EspNode node = nodeMap .get (nodeId );
292
+ boolean isDeviceFound = false ;
293
+ if (node != null ) {
294
+ isDeviceFound = true ;
295
+ }
296
+ EspNode localNode = JsonDataParser .setNodeConfig (node , configJson );
297
+
298
+ if (node != null ) {
299
+ Log .e (TAG , "Found node " + localNode .getNodeId () + " on local network." );
300
+ isDeviceFound = true ;
301
+ localNode .setAvailableLocally (true );
302
+ localNode .setIpAddress (dnsDevice .getIpAddr ());
303
+ localNode .setPort (dnsDevice .getPort ());
304
+ localNode .setOnline (true );
305
+ mDNSDeviceMap .put (localNode .getNodeId (), dnsDevice );
306
+ }
307
+
308
+ if (!TextUtils .isEmpty (paramsData ) && isDeviceFound ) {
309
+
310
+ JSONObject paramsJson = null ;
311
+ try {
312
+ paramsJson = new JSONObject (paramsData );
313
+ } catch (JSONException e ) {
314
+ e .printStackTrace ();
315
+ }
316
+ JsonDataParser .setAllParams (EspApplication .this , localNode , paramsJson );
317
+ nodeMap .put (localNode .getNodeId (), localNode );
318
+ EventBus .getDefault ().post (new UpdateEvent (AppConstants .UpdateEventType .EVENT_LOCAL_DEVICE_UPDATE ));
319
+ }
320
+ }
321
+ }
322
+ }
323
+
324
+ @ Override
325
+ public void onResponseFailure (Exception exception ) {
326
+ // Nothing to do
327
+ }
328
+
329
+ @ Override
330
+ public void onNetworkFailure (Exception exception ) {
331
+ // Nothing to do
332
+ }
333
+ });
334
+ }
335
+ }
336
+
337
+ @ Override
338
+ public void onResponseFailure (Exception exception ) {
339
+ // Nothing to do
340
+ }
341
+
342
+ @ Override
343
+ public void onNetworkFailure (Exception exception ) {
344
+ // Nothing to do
345
+ }
346
+ });
347
+ }
348
+ };
211
349
}
0 commit comments