278 } |
279 } |
279 syslog(LOG_NOTICE, "fermenter_ws_receive(%s)", buf); |
280 syslog(LOG_NOTICE, "fermenter_ws_receive(%s)", buf); |
280 } |
281 } |
281 |
282 |
282 |
283 |
|
284 void pong_ws_receive(char *buf) |
|
285 { |
|
286 struct json_object *val, *jobj; |
|
287 |
|
288 jobj = json_tokener_parse(buf); |
|
289 json_object_object_get_ex(jobj, "pong", &val); |
|
290 long ws_pongno = json_object_get_int(val); |
|
291 if (ws_pongno != ws_pingno) { |
|
292 syslog(LOG_NOTICE, "ws: ping/pong error %ld/%ld", ws_pingno, ws_pongno); |
|
293 } |
|
294 } |
|
295 |
|
296 |
283 static int callback_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) |
297 static int callback_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) |
284 { |
298 { |
285 struct per_session_data__lws_mirror *pss = (struct per_session_data__lws_mirror *)user; |
299 struct per_session_data__lws_mirror *pss = (struct per_session_data__lws_mirror *)user; |
286 int n, m; |
300 int n, m; |
287 char buf[WS_INBUF + 1]; |
301 char buf[WS_INBUF + 1]; |
340 * {"node":"rpi01","group_id":"fermenters","control":"reboot"} |
354 * {"node":"rpi01","group_id":"fermenters","control":"reboot"} |
341 * {"node":"rpi01","group_id":"fermenters","control":"rebirth"} |
355 * {"node":"rpi01","group_id":"fermenters","control":"rebirth"} |
342 */ |
356 */ |
343 if (strncmp(buf, (char *)"{\"type\":\"fermenter\",", 20) == 0) { |
357 if (strncmp(buf, (char *)"{\"type\":\"fermenter\",", 20) == 0) { |
344 fermenter_ws_receive(buf); |
358 fermenter_ws_receive(buf); |
345 // } else if (strncmp(buf, (char *)"{\"device\":\"co2meters\",", 22) == 0) { |
359 } else if (strncmp(buf, (char *)"{\"type\":\"device\",", 17) == 0) { |
346 // co2meter_ws_receive(buf); |
360 |
347 // } else if (strncmp(buf, (char *)"{\"device\":\"ispindels\",", 22) == 0) { |
361 } else if (strncmp(buf, (char *)"{\"type\":\"global\",", 17) == 0) { |
348 // ispindel_ws_receive(buf); |
362 |
349 // } else if (strncmp(buf, (char *)"{\"node\":\"", 9) == 0) { |
363 #ifdef USE_SIMULATOR |
350 // node_ws_receive(buf); |
364 } else if (strncmp(buf, (char *)"{\"type\":\"simulator\",", 20) == 0) { |
|
365 |
|
366 #endif |
|
367 } else if (strncmp(buf, (char *)"{\"pong\":", 8) == 0) { |
|
368 pong_ws_receive(buf); |
351 } |
369 } |
352 |
370 |
353 break; |
371 break; |
354 |
372 |
355 case LWS_CALLBACK_CLOSED: |
373 case LWS_CALLBACK_CLOSED: |
378 */ |
396 */ |
379 void ws_broadcast(char *msg) |
397 void ws_broadcast(char *msg) |
380 { |
398 { |
381 int len, err; |
399 int len, err; |
382 |
400 |
383 syslog(LOG_NOTICE, "%s", msg); |
|
384 err = pthread_mutex_lock(&ws_mutex); |
401 err = pthread_mutex_lock(&ws_mutex); |
385 if (err) { |
402 if (err) { |
386 syslog(LOG_NOTICE, "ws_broadcast pthread_mutex_lock error %d", err); |
403 syslog(LOG_NOTICE, "ws_broadcast pthread_mutex_lock error %d", err); |
387 } else { |
404 } else { |
388 |
405 |