Coordinator v2
Dependencies: NerfUSXbee PinDetect EthernetInterface JSON MFRC522 WebSocketClient mbed-rtos mbed
serverEvents.hpp
00001 #pragma once 00002 #include "ports.hpp" 00003 #include "EthernetInterface.h" 00004 #include "Websocket.h" 00005 #include "jsonParser.hpp" 00006 #include "dispatcher.hpp" 00007 00008 #define USING_DHCP_SERVER 0 00009 00010 EthernetInterface eth; 00011 Websocket ws("ws://1.0.0.1:8080/"); 00012 Mail<ServerEvent, 30> messages_to_server; 00013 void websocket_message_send(ServerEvent event); 00014 00015 void ethernet_initialization() { 00016 #if USING_DHCP_SERVER 00017 eth.init(); 00018 #else 00019 char ip_addr[]="1.0.0.2"; 00020 char mask[]="255.255.255.0"; 00021 char gateway[]="1.0.0.1"; 00022 eth.init(ip_addr, mask, gateway); 00023 #endif 00024 00025 eth.connect(); 00026 toPc("IP Address is %s", eth.getIPAddress()); 00027 toPc("Mask is %s", eth.getNetworkMask()); 00028 } 00029 00030 void websocket_initialization() { 00031 toPc("Connecting to websocket url: \"ws://1.0.0.1:8080/\""); 00032 ws.connect(); 00033 if (ws.is_connected()) { 00034 ws.send("{\"event\":\"mbed\",\"data\":{\"state\": \"connected\"}}"); 00035 } 00036 } 00037 00038 //Thread 00039 void websocket_message_receiver() { 00040 ethernet_initialization(); 00041 websocket_initialization(); 00042 00043 char msgBuffer[500]; 00044 ServerEvent newEvent; 00045 while(1) { 00046 if (!ws.is_connected()) { 00047 toPc("Disconnected from websocket... Attempting to reconnect"); 00048 websocket_initialization(); 00049 } else { 00050 if (ws.read(msgBuffer)) { 00051 toPc("New message received from server"); 00052 parse_server_event_from_json(msgBuffer, &newEvent); 00053 dispatch_event_from_server(&newEvent); 00054 } 00055 } 00056 Thread::wait(100); 00057 } 00058 } 00059 00060 //Via thread 00061 void websocket_message_send(ServerEvent event) 00062 { 00063 ServerEvent *newEvent = messages_to_server.alloc(); 00064 *newEvent = event; 00065 messages_to_server.put(newEvent); 00066 } 00067 00068 //Direct send 00069 void send_message_to_websocket(ServerEvent *event) 00070 { 00071 char msgBuffer[500]; 00072 if (strcmp(event->event, "start") == 0) { 00073 sprintf(msgBuffer, "{" 00074 "\"event\":\"%s\"" 00075 "}", event->event); 00076 } else if (strcmp(event->event, "navigate") == 0) { 00077 sprintf(msgBuffer, "{" 00078 "\"event\":\"%s\"," 00079 "\"data\":{" 00080 "\"direction\":\"%s\"" 00081 "}" 00082 "}", event->event, event->data.direction); 00083 } else if (strcmp(event->event, "gun") == 0) { 00084 sprintf(msgBuffer, "{" 00085 "\"event\":\"%s\"," 00086 "\"data\":{" 00087 "\"rfid_code\":\"%s\"" 00088 "}" 00089 "}", event->event, event->data.rfid_code); 00090 } else { //event == report 00091 sprintf(msgBuffer, "{" 00092 "\"event\":\"%s\"," 00093 "\"data\":{" 00094 "\"targets\": %i," 00095 "\"averageReflexTime\": %i," 00096 "\"gameLength\": %i," 00097 "\"score\": %i" 00098 "}" 00099 "}", event->event, event->data.targets, event->data.averageReflexTime, 00100 event->data.gameLength, event->data.score); 00101 } 00102 00103 //toPc("Sending msg to websocket: %s", msgBuffer); 00104 ws.send(msgBuffer); 00105 } 00106 00107 //Thread 00108 void websocket_message_sender() 00109 { 00110 while(1) { 00111 osEvent evt = messages_to_server.get(); 00112 if (evt.status == osEventMail) { 00113 ServerEvent *mail = (ServerEvent*)evt.value.p; 00114 send_message_to_websocket(mail); 00115 messages_to_server.free(mail); 00116 } 00117 Thread::yield(); 00118 } 00119 }
Generated on Tue Jul 12 2022 15:36:49 by 1.7.2