Hallo Zusammen,
die nachfolgende Funktion wird durch
webSocket.onEvent(webSocketEvent)
aufgerufen, wenn über die Websocketverbindung vom Client ein neues Json Paar empfangen wird.
void webSocketEvent (byte num, WStype_t type, unsigned char * payload, size_t length) { // Server hat irgendwelche Daten über websocket vom Client erhalten
char * inhalt = (char *) malloc (JSON_SIZE_RX); // Dyn. speicher allokieren
switch(type) {
case WStype_DISCONNECTED: // enum that reads status, this is used for debugging
Serial.println("Websocket: Client Disconnected");
break;
case WStype_CONNECTED: // Check if a WebSocket Client is connected or not
Serial.println("Websocket: Client Connected");
webSocket.broadcastTXT(JSONtxt); // Konfig.variablen als Json zum Client senden zwecks ausfüllen der Eingabefelder
break;
case WStype_TEXT: { // check response from client, needs curly brackets due to init of error, see https://forum.arduino.cc/t/defined-names-of-switch-error-jump-to-case-label/628899/2?u=wmauss
for(int i=0; i < length; i++) {
Serial.print((char)payload[i]);
strcat(inhalt, payload[i]);
}
deserializeConfig(inhalt); // Ergebnis wird in globaler Variable doc_rx gespeichert
break;
}
default:
break;
}
}
Wenn ich die Fehlermeldung richtig verstehe gibt es nun eine Datentypeninkompatibilität zwischen dem Parameter payload (const char ) im Funktionsaufruf und payload[i] in strcat(), denn hier wird unsigned char erwartet.
Fehlermeldung:
src/main.cpp: In function 'void setup()':
src/main.cpp:1172:21: error: cannot convert 'void(byte, WStype_t, const char*, size_t)' {aka 'void(unsigned char, WStype_t, const char*, unsigned int)'} to 'WebSocketsServerCore::WebSocketServerEvent' {aka 'std::function<void(unsigned char, WStype_t, unsigned char*, unsigned int)>'}
Ich hatte dann noch versucht, die Datentypen umzuwandeln mittels
char * cstr =(char *)payload;
also so:
void webSocketEvent (byte num, WStype_t type, uint8_t * payload, size_t length) { // Server hat irgendwelche Daten über websocket vom Client erhalten
char * inhalt = (char *) malloc (JSON_SIZE_RX); // Dyn. speicher allokieren
char * cstr =(char *)payload;
switch(type) {
case WStype_DISCONNECTED: // enum that reads status, this is used for debugging
Serial.println("Websocket: Client Disconnected");
break;
case WStype_CONNECTED: // Check if a WebSocket Client is connected or not
Serial.println("Websocket: Client Connected");
webSocket.broadcastTXT(JSONtxt); // Konfig.variablen als Json zum Client senden zwecks ausfüllen der Eingabefelder
break;
case WStype_TEXT: { // check response from client, needs curly brackets due to init of error, see https://forum.arduino.cc/t/defined-names-of-switch-error-jump-to-case-label/628899/2?u=wmauss
for(int i=0; i < length; i++) {
Serial.print((char)payload[i]);
strcat(inhalt, cstr[i]);
}
deserializeConfig(inhalt); // Ergebnis wird in globaler Variable doc_rx gespeichert
break;
}
default:
break;
}
}
was aber lediglich die Fehlermeldung
src/main.cpp: In function 'void webSocketEvent(byte, WStype_t, uint8_t*, size_t)':
src/main.cpp:1000:30: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
1000 | strcat(inhalt, cstr[i]);
| ~~~~~~^
| |
| char
nach sich gezogen hat.
Könnt ihr mir sagen, wie das geht?
Danke und Grüße
Werner