RPC mbed Server (basierend auf HTTP Protokoll) mit UI via Browser
Dependencies: EthernetInterface mbed-rpc mbed-rtos mbed
Fork of HTTP-Server by
Formatter.cpp
- Committer:
- feb11
- Date:
- 2013-07-17
- Revision:
- 0:9e4bcb10b3e3
- Child:
- 4:624527ebc0fa
File content as of revision 0:9e4bcb10b3e3:
#include "Formatter.h" #include "mbed.h" #include "RPCObjectManager.h" #include "EthernetInterface.h" const char *SIMPLE_HTML_CODE = "\ <!DOCTYPE html>\ <html>\ <head>\ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\ <title>TCP Server</title>\ </head>\ <body>"; const char* INTERACTIVE_HTML_CODE_1 = "\ <!DOCTYPE html>\ <html>\ <head>\ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\ <title>TCP Server</title>\ <script type=\"text/javascript\">\ var ip = \"%s\";\ function submitCreateForm()\ {\ var list = document.getElementById(\"type\");\ var type = list.options[list.selectedIndex].value;\ var name = document.getElementById(\"name\").value;\ var arg = document.getElementById(\"arg\").value;\ var url;\ if(arg === \"\")\ url = \"http://\" + ip + type + \"new?name=\" + name;\ else\ url = \"http://\" + ip + type + \"new?arg=\" + arg + \"&name=\" + name;\ location.href= url;\ }\ function submitCallFuncForm()\ {\ var command = document.getElementById(\"command\").value;\ var tmp = command.split(\' \');\ var url = tmp[0];\ if(tmp.length > 1)\ url += \"?\";\ for(var i = 1; i < tmp.length; ++i)\ {\ url += \"arg\" + i + \"=\" + tmp[i];\ if(i+1 < tmp.length)\ url += \"&\";\ }\ location.href = url;\ }\ </script>\ </head> \ <body>"; const char* INTERACTIVE_HTML_CODE_2 = "<h3>Create Object :</h3>\ <form id=\"create\" method=\"get\">\ Type: <select id=\"type\">\ <option value=\"/DigitalOut/\">DigitalOut</option>\ <option value=\"/DigitalIn/\">DigitalIn</option>\ <option value=\"/DigitalInOut/\">DigitalInOut</option>\ <option value=\"/PwmOut/\">PwmOut</option>\ <option value=\"/Timer/\">Timer</option>\ </select><br>\ name: <input type=\"text\" id=\"name\"><br>\ arg(optional): <input type=\"text\" id=\"arg\">\ <p><input type=\"button\" value=\"Create\" onclick=\"javascript:submitCreateForm();\"></p>\ </form> \ \ <h3>Call a function :</h3>\ <p>Enter an RPC command.</p>\ <form method=\"get\">\ Command: <input type= \"text\" id=\"command\"><br>\ <input type=\"button\" value=\"Send\" onclick=\"javascript:submitCallFuncForm();\"><br>\ </form>\ </body> \ </html>"; static char chunk[1024]; Formatter::Formatter(int nb): currentChunk(0), nbChunk(nb) { } char* Formatter::get_page(char *reply) { chunk[0] = '\0'; if(currentChunk < nbChunk) { get_chunk(currentChunk, reply); currentChunk++; } else currentChunk = 0; return chunk; } void Formatter::get_chunk(const int c, char *reply) { strcat(chunk, reply); } SimpleHTMLFormatter::SimpleHTMLFormatter(): Formatter() { } void SimpleHTMLFormatter::get_chunk(const int c, char* reply) { strcat(chunk, SIMPLE_HTML_CODE); if(reply != NULL && strlen(reply) != 0) { strcat(chunk, "RPC reply : "); strcat(chunk, reply); } if(!RPCObjectManager::instance().is_empty()) { strcat(chunk, "<ul>"); for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin(); itor != RPCObjectManager::instance().end(); ++itor) { strcat(chunk, "<li>"); strcat(chunk, *itor); strcat(chunk, "</li>"); } strcat(chunk, "</ul>"); } strcat(chunk, "</body></html>"); } InteractiveHTMLFormatter::InteractiveHTMLFormatter(): Formatter(3) { } void InteractiveHTMLFormatter::get_chunk(const int c, char *reply) { if(c == 0) sprintf(chunk, INTERACTIVE_HTML_CODE_1, EthernetInterface::getIPAddress()); else if(c == 1) { if(reply != NULL && strlen(reply) != 0) { strcat(chunk, "RPC reply : "); strcat(chunk, reply); } if(!RPCObjectManager::instance().is_empty()) { strcat(chunk, "<p>Objects created :</p>"); strcat(chunk, "<ul>"); for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin(); itor != RPCObjectManager::instance().end(); ++itor) { strcat(chunk, "<li>"); strcat(chunk, *itor); strcat(chunk, " (<a href=\"http://"); strcat(chunk, EthernetInterface::getIPAddress()); strcat(chunk, "/"); strcat(chunk, *itor); strcat(chunk, "/delete\">delete</a>)"); strcat(chunk, "</li>"); } strcat(chunk, "</ul>"); } strcat(chunk, " "); } else if(c == 2) strcat(chunk, INTERACTIVE_HTML_CODE_2); }