'use strict'; goog.provide('Blockly.Python.wifiserver'); goog.require('Blockly.Python'); // Blockly.Python['wifiServer_setup'] = function (block) { // var wifi_webserver= "#include "; // Blockly.Python.addInclude("wifi_webserver",wifi_webserver); // var port= Blockly.Python.valueToCode(block, 'PORT', Blockly.Python.ORDER_ATOMIC) || 80; // var code="ESP8266WebServer server("+port+");" // Blockly.Python.addDeclaration("setupServer_"+port, code); // return ""; // }; // Blockly.Python['wifiserver_setRouter'] = function (block) { // var response= Blockly.Python.valueToCode(block, "VAR", Blockly.Python.ORDER_ATOMIC) || ""; // var url= block.getFieldValue("URL") || "/"; // var code= "server.on(\""+url+"\", []() {"+response+"});" // Blockly.Python.addSetup("setRouter_"+url, code); // return ""; // }; Blockly.Python['wifiServer_onNotFound'] = function(block) { var response = Blockly.Python.valueToCode(block, "VAR", Blockly.Python.ORDER_ATOMIC) || ""; var code = "server.onNotFound(" + response + ");"; Blockly.Python.addSetup("setRouter_urlNotFound", code); return ""; }; Blockly.Python['wifiServer_serverSend'] = function(block) { var http_code = Blockly.Python.valueToCode(block, "CODE", Blockly.Python.ORDER_ATOMIC) || ""; var type = Blockly.Python.valueToCode(block, "TYPE", Blockly.Python.ORDER_ATOMIC) || ""; var content = Blockly.Python.valueToCode(block, "CONTENT", Blockly.Python.ORDER_ATOMIC) || ""; var code = "server.send(" + http_code + "," + type + "," + content + ");"; return [code, Blockly.Python.ORDER_ATOMIC]; }; Blockly.Python['wifiServer_handleClient'] = function(block) { var code = "server.handleClient();\n"; return code; }; Blockly.Python['wifiServer_waitConnection'] = function(block) { var code = ""; return ""; }; /*********************** * version 2 * ***********************/ Blockly.Python['wifiServer_setup'] = function(block) { var wifi_server = "#include "; Blockly.Python.addInclude("wifi_server", wifi_server); var json_include = "#include "; Blockly.Python.addInclude("json_include", json_include); var codes = "ESP8266WebServer server(80);" Blockly.Python.addDeclaration("SetupWiFiServer_80", codes); var code = ""; return code; }; Blockly.Python['wifiServer_setRouter'] = function(block) { var code = ""; for (let i = 0; i < block.itemCount_; i++) { var item_url = block.getFieldValue("URL" + i) || "/" + i; var item_code = Blockly.Python.statementToCode(block, 'STATEMENT' + i); code += "server.on(\"" + item_url + "\",[]() {\n" + item_code + "\n" + " server.send(200,\"text/plain\",\"200\");\n" + "});\n" } Blockly.Python.addSetup("setRouter", code); code = " server.onNotFound([]() {\n" + " server.send(404,\"text/plain\",\"404:Not found\");\n" + " });"; Blockly.Python.addSetup("setRouter_onNotFound", code); Blockly.Python.addSetup("ServerBegin", "server.begin();\n") return "server.handleClient();\n"; }; Blockly.Python['wifiServer_setRootPage'] = function(block) { var code = ""; var item_code = Blockly.Python.statementToCode(block, 'STATEMENT0'); code += "server.on(\"/\",[]() {\n" + item_code + "\n" + " server.send(200,\"text/plain\",\"200\");\n" + "});\n" Blockly.Python.addSetup("setRootPage", code); code = " server.onNotFound([]() {\n" + " server.send(404,\"text/plain\",\"404:Not found\");\n" + " });"; Blockly.Python.addSetup("setRouter_onNotFound", code); Blockly.Python.addSetup("ServerBegin", "server.begin();\n") return "server.handleClient();\n"; }; Blockly.Python['wifiServer_Send'] = function(block) { var json_include = "#include "; Blockly.Python.addInclude("json_include", json_include); // var precode = "char JSONServerMsgBuffer[240];\n"; // Blockly.Python.addDeclaration("jsontool_prettyPrint", precode); var VarName = block.getFieldValue('VAR') || "json"; var code = "StaticJsonBuffer<800> Serverbuffer_" + VarName + ";\n" + "JsonObject& " + VarName + "_json_ = Serverbuffer_" + VarName + ".createObject();\n" + "JsonArray& data_json_S = " + VarName + "_json_.createNestedArray(\"data\");\n" + // "JsonArray& data_type_S = " + VarName + "_json_.createNestedArray(\"type\");\n"+ ""; var size = block.itemCount_; var item_value = ''; for (var n = 0; n < block.itemCount_; n++) { item_value = Blockly.Python.valueToCode(block, 'ADD' + n, Blockly.Python.ORDER_NONE) || ''; code += 'data_json_S.add(' + item_value + ");\n"; // if (block.childBlocks_[n].type == "text") { // code += "data_type_S.add(0);\n"; // } else if (block.childBlocks_[n].type == "math_number") { // code += "data_type_S.add(1);\n"; // } } code += "String jsonString;\n" + VarName + "_json_.printTo(jsonString);\n " + "server.send(200, \"application/json\", jsonString);\n" return code; }; Blockly.Python['wifiServer_Receive'] = function(block) { var json_include = "#include "; Blockly.Python.addInclude("json_declaration", json_include); var varName = block.getFieldValue("VAR") || ''; var length = block.getFieldValue("LENGTH") || ''; var data_dec = "String data_" + varName + "[" + length + "];\n" + // "int dataType_" + varName + "[" + length + "];\n" + ""; // for (let i = 0; i < length; i++) { // data_dec += "0"; // if (i != length - 1) data_dec += ","; // } // data_dec += "};\n"; Blockly.Python.addDeclaration("data_dec" + varName, data_dec); var Server_receiver = "void server_receiver_" + varName + "(String data) {" + " StaticJsonBuffer<800> ParseBuffer_" + varName + ";\n" + " JsonObject& parse_" + varName + " = ParseBuffer_" + varName + ".parseObject(data);\n" + " for (int i = 0; i < " + length + "; i++) {\n" + " data_" + varName + "[i] = parse_" + varName + "[\"data\"][i].as();\n" + // " dataType_" + varName + "[i] = parse_" + varName + "[\"type\"][i].as();\n" + " }\n}\n"; Blockly.Python.addFunction("Server_receiver_" + varName, Server_receiver); var code = " String data = server.arg(\"plain\");\n" + "server_receiver_" + varName + "(data);\n" + "server.send(200,\"text/plain\",data);\n"; return code; }; Blockly.Python['wifiServer_Receive_getValue'] = function(block) { var varName = block.getFieldValue("VAR") || ''; var index = block.getFieldValue("INDEX") || ''; var type = block.getFieldValue("TYPE") || ''; // var code = "dataType_" + varName + "[" + index + "] == 1 ? data_" + varName + "[" + index + "].toInt() : data_" + varName + "[" + index + "]"; var code = "data_" + varName + "[" + index + "]" if (type == "Int") code += ".toInt()"; return [code, Blockly.Python.ORDER_ATOMIC]; }