⚡ package getprop using socket prop getter
This commit is contained in:
parent
433743f790
commit
7b05a0a244
|
@ -30,7 +30,6 @@ var _j_content = [
|
||||||
var _parse_error = 0;
|
var _parse_error = 0;
|
||||||
|
|
||||||
var parse = func() {
|
var parse = func() {
|
||||||
_parse_error = 0;
|
|
||||||
var text = "";
|
var text = "";
|
||||||
var line = 1;
|
var line = 1;
|
||||||
var text_size = 0;
|
var text_size = 0;
|
||||||
|
@ -226,6 +225,7 @@ var parse = func() {
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(source) {
|
return func(source) {
|
||||||
|
_parse_error = 0;
|
||||||
if(typeof(source)!="str") {
|
if(typeof(source)!="str") {
|
||||||
println("json::parse: must use string but get", typeof(str));
|
println("json::parse: must use string but get", typeof(str));
|
||||||
_parse_error += 1;
|
_parse_error += 1;
|
||||||
|
@ -247,8 +247,10 @@ var parse = func() {
|
||||||
}();
|
}();
|
||||||
|
|
||||||
var stringify = func(object) {
|
var stringify = func(object) {
|
||||||
|
_parse_error = 0;
|
||||||
var object_type = typeof(object);
|
var object_type = typeof(object);
|
||||||
if(object_type!="hash" and object_type!="vec" and object_type!="namespace") {
|
if(object_type!="hash" and object_type!="vec" and object_type!="namespace") {
|
||||||
|
_parse_error += 1;
|
||||||
println("json::stringify: must use hashmap or vector, but get ", typeof(object));
|
println("json::stringify: must use hashmap or vector, but get ", typeof(object));
|
||||||
return "[]";
|
return "[]";
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,38 +6,61 @@
|
||||||
use module.libsock;
|
use module.libsock;
|
||||||
use std.json;
|
use std.json;
|
||||||
|
|
||||||
var socket = libsock.socket;
|
var new_getter = func(hostname, port) {
|
||||||
var sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP);
|
var socket = libsock.socket;
|
||||||
|
var sd = socket.socket(
|
||||||
|
socket.AF_INET,
|
||||||
|
socket.SOCK_STREAM,
|
||||||
|
socket.IPPROTO_TCP
|
||||||
|
);
|
||||||
|
|
||||||
while((var err = socket.connect(sd, "127.0.0.1", 5500))==socket.SOCKET_ERROR) {
|
while((var err = socket.connect(sd, hostname, port))==socket.SOCKET_ERROR) {
|
||||||
println("[", os.time(), "] connect to 127.0.0.1:5500 failed: ", socket.errno());
|
println(
|
||||||
unix.sleep(1);
|
"[", os.time(), "] connect to ",
|
||||||
}
|
hostname, ":", port, " failed: ",
|
||||||
println("[", os.time(), "] connect to 127.0.0.1:5500 succeeded");
|
socket.errno()
|
||||||
|
);
|
||||||
|
unix.sleep(1);
|
||||||
|
}
|
||||||
|
println("[", os.time(), "] connect to ", hostname, ":", port, " succeeded");
|
||||||
|
|
||||||
|
var getprop = func(path) {
|
||||||
|
var header = "GET /json"~path~" HTTP/1.1\n\r\n";
|
||||||
|
var res = socket.send(sd, header);
|
||||||
|
var message = socket.recv(sd, 1024);
|
||||||
|
|
||||||
var header = "GET /json/ HTTP/1.1\n\r\n";
|
var total_source = message.str;
|
||||||
var res = socket.send(sd, header);
|
while(message.size!=0) {
|
||||||
var message = socket.recv(sd, 1024);
|
message = socket.recv(sd, 1024);
|
||||||
|
total_source ~= message.str;
|
||||||
|
}
|
||||||
|
|
||||||
var total_source = message.str;
|
var begin_position = find("{", total_source);
|
||||||
var total_size = message.size;
|
var end_position = find("0\r\n\r\n", total_source);
|
||||||
|
var props = substr(total_source, begin_position, end_position-begin_position);
|
||||||
|
props = json.parse(props);
|
||||||
|
json.check_error();
|
||||||
|
if (size(props)==0) {
|
||||||
|
println("getprop: node \"", path, "\" not found");
|
||||||
|
}
|
||||||
|
|
||||||
while(message.size==1024) {
|
return props;
|
||||||
message = socket.recv(sd, 1024);
|
}
|
||||||
total_source ~= message.str;
|
|
||||||
total_size += message.size;
|
var close = func {
|
||||||
|
socket.closesocket(sd);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
getprop: getprop,
|
||||||
|
close: close
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.closesocket(sd);
|
var dump = func(tree, indent = "") {
|
||||||
|
if (size(tree)==0) {
|
||||||
var A3E_position = find("{", total_source);
|
return;
|
||||||
var end_0_position = find("0\r\n\r\n", total_source);
|
}
|
||||||
var props = substr(total_source, A3E_position, end_0_position-A3E_position);
|
|
||||||
props = json.parse(props);
|
|
||||||
json.check_error();
|
|
||||||
|
|
||||||
var dfs = func(tree, indent = "") {
|
|
||||||
println(indent, "---------");
|
println(indent, "---------");
|
||||||
println(indent, "path : \"", tree.path, "\"");
|
println(indent, "path : \"", tree.path, "\"");
|
||||||
println(indent, "name : \"", tree.name, "\"");
|
println(indent, "name : \"", tree.name, "\"");
|
||||||
|
@ -49,10 +72,29 @@ var dfs = func(tree, indent = "") {
|
||||||
if (contains(tree, "children")) {
|
if (contains(tree, "children")) {
|
||||||
println(indent, "children :");
|
println(indent, "children :");
|
||||||
foreach(var i; tree.children) {
|
foreach(var i; tree.children) {
|
||||||
dfs(i, indent~" ");
|
dump(i, indent~" ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dfs(props);
|
if (size(arg)<2) {
|
||||||
|
println("require hostname and port");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
if (size(arg)>2) {
|
||||||
|
println("too many arguments, only require hostname and port");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
var getter = new_getter(arg[0], num(arg[1]));
|
||||||
|
|
||||||
|
var get_props = func(path = "/") {
|
||||||
|
var props = getter.getprop(path);
|
||||||
|
dump(props);
|
||||||
|
}
|
||||||
|
|
||||||
|
get_props();
|
||||||
|
get_props("/e-tron/dialog/config");
|
||||||
|
get_props("/e-tron/dialog/config/a");
|
||||||
|
|
||||||
|
getter.close();
|
Loading…
Reference in New Issue