From 522ca8a891c754216d867b9b8f185cb1340011dc Mon Sep 17 00:00:00 2001 From: Adrian Bowyer Date: Thu, 2 May 2013 22:59:31 +0100 Subject: [PATCH] JSON responses half working. --- Platform.ino | 39 +++++++++++++++++++++++------------ Webserver.h | 8 +++++++- Webserver.ino | 57 ++++++++++++++++++++++++++++++--------------------- 3 files changed, 67 insertions(+), 37 deletions(-) diff --git a/Platform.ino b/Platform.ino index ac61cda..50a13f2 100644 --- a/Platform.ino +++ b/Platform.ino @@ -70,6 +70,13 @@ inline void Platform::SendToClient(unsigned char b) if(client) { client.write(b); + if(reprap->GetWebserver()->EchoOutput()) + { + Serial.write(b); + //Message(HOST_MESSAGE, message); + //if(StringEndsWith(message, "\n")) + // Message(HOST_MESSAGE, "o: "); + } //Serial.write(b); } else Message(HOST_MESSAGE, "Attempt to send byte to disconnected client."); @@ -521,6 +528,25 @@ void Platform::WriteString(int file, char* b) //files[file].print(b); } +// Send something to the network client + +void Platform::SendToClient(char* message) +{ + if(client) + { + client.print(message); + if(reprap->GetWebserver()->EchoOutput()) + { + Serial.print(message); + //Message(HOST_MESSAGE, message); + //if(StringEndsWith(message, "\n")) + // Message(HOST_MESSAGE, "o: "); + } + } else + Message(HOST_MESSAGE, "Attempt to send string to disconnected client.
\n"); +} + + void Platform::Message(char type, char* message) { @@ -547,19 +573,6 @@ void Platform::Message(char type, char* message) } } -// Send something to the network client - -void Platform::SendToClient(char* message) -{ - if(client) - { - client.print(message); - //Serial.print("Sent: "); - //Serial.print(message); - } else - Message(HOST_MESSAGE, "Attempt to send string to disconnected client.
\n"); -} - // Where the php/htm etc files are char* Platform::GetWebDir() diff --git a/Webserver.h b/Webserver.h index 8addf45..8b328e5 100644 --- a/Webserver.h +++ b/Webserver.h @@ -40,6 +40,7 @@ class Webserver Webserver(Platform* p); boolean Available(); + boolean EchoOutput(); byte Read(); void Init(); void Spin(); @@ -91,8 +92,9 @@ class Webserver char clientLine[STRING_LENGTH]; char clientRequest[STRING_LENGTH]; char clientQualifier[STRING_LENGTH]; + char jsonResponse[STRING_LENGTH]; char gcodeBuffer[GCODE_LENGTH]; - int koPointer; + int jsonPointer; boolean gcodeAvailable; int gcodePointer; int clientLinePointer; @@ -112,7 +114,11 @@ class Webserver boolean sendTable; char eatInputChar; int phpRecordPointer; + boolean echoInput; + boolean echoOutput; }; +inline boolean Webserver::EchoOutput() { return echoOutput; } + #endif diff --git a/Webserver.ino b/Webserver.ino index dde1212..c733e34 100644 --- a/Webserver.ino +++ b/Webserver.ino @@ -191,7 +191,7 @@ void Webserver::SendFile(char* nameOfFileToSend) if(StringStartsWith(nameOfFileToSend, KO_START)) GetKOString(&nameOfFileToSend[KO_FIRST]); - if(koPointer < 0) + if(jsonPointer < 0) { fileBeingSent = platform->OpenFile(platform->PrependRoot(platform->GetWebDir(), nameOfFileToSend), false); if(fileBeingSent < 0) @@ -207,7 +207,7 @@ void Webserver::SendFile(char* nameOfFileToSend) writing = true; } - if(koPointer >=0) + if(jsonPointer >=0) platform->SendToClient("HTTP/1.1 201 OK\n"); else platform->SendToClient("HTTP/1.1 200 OK\n"); @@ -216,17 +216,17 @@ void Webserver::SendFile(char* nameOfFileToSend) if(StringEndsWith(nameOfFileToSend, ".png")) platform->SendToClient("image/png\n"); - else if (koPointer >=0) + else if (jsonPointer >=0) platform->SendToClient("application/json\n"); else if(StringEndsWith(nameOfFileToSend, ".js")) platform->SendToClient("application/javascript\n"); else platform->SendToClient("text/html\n"); - if (koPointer >=0) + if (jsonPointer >=0) { platform->SendToClient("Content-Length: "); - sprintf(sLen, "%d", strlen(clientRequest)); + sprintf(sLen, "%d", strlen(jsonResponse)); platform->SendToClient(sLen); platform->SendToClient("\n"); } @@ -251,14 +251,14 @@ void Webserver::WriteByte() { unsigned char b; - if(koPointer >= 0) + if(jsonPointer >= 0) { - if(clientRequest[koPointer]) - platform->SendToClient(clientRequest[koPointer++]); + if(jsonResponse[jsonPointer]) + platform->SendToClient(jsonResponse[jsonPointer++]); else { - koPointer = -1; - clientRequest[0] = 0; + jsonPointer = -1; + jsonResponse[0] = 0; CloseClient(); } } else @@ -291,31 +291,31 @@ void Webserver::CheckPassword() void Webserver::GetKOString(char* request) { - koPointer = 0; + jsonPointer = 0; writing = true; boolean ok = false; if(StringStartsWith(request, "name")) { - strcpy(clientRequest, "{\"myName\":\""); + strcpy(jsonResponse, "{\"myName\":\""); //strcpy(clientRequest, "{\""); - strcat(clientRequest, myName); - strcat(clientRequest, "\"}"); + strcat(jsonResponse, myName); + strcat(jsonResponse, "\"}"); ok = true; } if(StringStartsWith(request, "page")) { - strcpy(clientRequest, "{\"page\":\""); - strcat(clientRequest, myName); //FIXME - strcat(clientRequest, "\"}"); + strcpy(jsonResponse, "{\"page\":\""); + strcat(jsonResponse, myName); //FIXME + strcat(jsonResponse, "\"}"); ok = true; } if(ok) { platform->Message(HOST_MESSAGE, "KnockOut response: "); - platform->Message(HOST_MESSAGE, clientRequest); + platform->Message(HOST_MESSAGE, jsonResponse); platform->Message(HOST_MESSAGE, " queued
\n"); } else { @@ -347,9 +347,9 @@ void Webserver::ParseGetPost() // Serial.print("HTTP request: "); // Serial.println(clientLine); - platform->Message(HOST_MESSAGE, "HTTP request: "); - platform->Message(HOST_MESSAGE, clientLine); - platform->Message(HOST_MESSAGE, "
\n"); + //platform->Message(HOST_MESSAGE, "HTTP request: "); + //platform->Message(HOST_MESSAGE, clientLine); + //platform->Message(HOST_MESSAGE, "
\n"); int i = 5; int j = 0; @@ -545,6 +545,7 @@ void Webserver::CharFromClient(char c) void Webserver::Spin() { + char sw[2]; if(!active) return; @@ -562,7 +563,15 @@ void Webserver::Spin() if(platform->ClientStatus() & AVAILABLE) { char c = platform->ClientRead(); - Serial.write(c); + if(echoInput) + { + Serial.print(c); + //sw[0] = c; + // sw[1] = 0; + //platform->Message(HOST_MESSAGE, sw); + //if(c == '\n') + // platform->Message(HOST_MESSAGE, "i: "); + } if(receivingPost && postFile >= 0) { @@ -899,7 +908,7 @@ void Webserver::Init() receivingPost = false; postSeen = false; getSeen = false; - koPointer = -1; + jsonPointer = -1; //postLength = 0L; inPHPFile = false; InitialisePHP(); @@ -915,6 +924,8 @@ void Webserver::Init() gcodePointer = 0; sendTable = true; phpRecordPointer = 0; + echoInput = false; + echoOutput = false; InitialisePost(); active = true; }