use of priv.bajdcc.LALR1.interpret.module.net.ModuleNetClient in project jMiniLang by bajdcc.
the class ModuleNet method buildRemoteMethods.
private void buildRemoteMethods(IRuntimeDebugInfo info) {
info.addExternalFunc("g_net_get", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "HTTP GET";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
String text = "";
String txt = String.valueOf(args.get(0).getObj());
logger.debug("Request url: " + txt);
try {
URL url = new URL(txt);
// 打开连接
URLConnection urlConnection = url.openConnection();
// 获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
text = sb.toString();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return new RuntimeObject(text);
}
});
info.addExternalFunc("g_net_get_json", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "HTTP GET - json";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
String text = "";
String txt = String.valueOf(args.get(0).getObj());
logger.debug("Request url(json): " + txt);
try {
URL url = new URL(txt);
// 打开连接
URLConnection urlConnection = url.openConnection();
// 获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
text = sb.toString();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return parseJson(text);
}
});
// -----------------------------------
// server
info.addExternalFunc("g_net_msg_create_server_internal", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG SERVER";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getServer() != null || getClient() != null)
return new RuntimeObject(false);
int port = ((BigInteger) args.get(0).getObj()).intValue();
setServer(new ModuleNetServer(port));
getServer().start();
return new RuntimeObject(true);
}
});
info.addExternalFunc("g_net_msg_shutdown_server", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG SERVER SHUTDOWN";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getServer() == null)
return new RuntimeObject(false);
getServer().exit();
return new RuntimeObject(true);
}
});
info.addExternalFunc("g_net_msg_get_server_status", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG SERVER GET STATUS";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getServer() != null) {
ModuleNetServer.Status s = getServer().getStatus();
if (s == ModuleNetServer.Status.ERROR) {
lastError = getServer().getError();
setServer(null);
}
status.getService().getProcessService().sleep(status.getPid(), MSG_QUERY_TIME);
return new RuntimeObject(BigInteger.valueOf(s.ordinal()));
}
return new RuntimeObject(BigInteger.valueOf(ModuleNetServer.Status.NULL.ordinal()));
}
});
// server
// -----------------------------------
// client
info.addExternalFunc("g_net_msg_create_client_internal", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG CLIENT";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getServer() != null || getClient() != null)
return new RuntimeObject(false);
String addr = String.valueOf(args.get(0).getObj());
setClient(new ModuleNetClient(addr));
getClient().start();
return new RuntimeObject(true);
}
});
info.addExternalFunc("g_net_msg_shutdown_client", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG CLIENT SHUTDOWN";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getClient() == null)
return new RuntimeObject(false);
getClient().exit();
return new RuntimeObject(true);
}
});
info.addExternalFunc("g_net_msg_get_client_status", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG CLIENT GET STATUS";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getClient() != null) {
ModuleNetClient.Status s = getClient().getStatus();
if (s == ModuleNetClient.Status.ERROR) {
lastError = getClient().getError();
setClient(null);
}
status.getService().getProcessService().sleep(status.getPid(), MSG_QUERY_TIME);
return new RuntimeObject(BigInteger.valueOf(s.ordinal()));
}
return new RuntimeObject(BigInteger.valueOf(ModuleNetClient.Status.NULL.ordinal()));
}
});
info.addExternalFunc("g_net_msg_client_send", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG CLIENT SEND";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getClient() != null) {
ModuleNetClient.Status s = getClient().getStatus();
if (s == ModuleNetClient.Status.RUNNING) {
status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
getClient().send(String.valueOf(args.get(0).getObj()));
return new RuntimeObject(true);
}
}
return new RuntimeObject(false);
}
});
info.addExternalFunc("g_net_msg_client_send_with_origin", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG CLIENT SEND(ORIGIN)";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getClient() != null) {
ModuleNetClient.Status s = getClient().getStatus();
if (s == ModuleNetClient.Status.RUNNING) {
status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
getClient().send(String.valueOf(args.get(0).getObj()), String.valueOf(args.get(1).getObj()));
return new RuntimeObject(true);
}
}
return new RuntimeObject(false);
}
});
info.addExternalFunc("g_net_msg_server_send", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG SERVER SEND";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getServer() != null) {
ModuleNetServer.Status s = getServer().getStatus();
if (s == ModuleNetServer.Status.RUNNING) {
status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
getServer().send(String.valueOf(args.get(0).getObj()));
return new RuntimeObject(true);
}
}
return new RuntimeObject(false);
}
});
info.addExternalFunc("g_net_msg_server_send_error", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG SERVER SEND ERROR";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getServer() != null) {
ModuleNetServer.Status s = getServer().getStatus();
if (s == ModuleNetServer.Status.RUNNING) {
status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
getServer().send_error(String.valueOf(args.get(0).getObj()));
return new RuntimeObject(true);
}
}
return new RuntimeObject(false);
}
});
info.addExternalFunc("g_net_msg_server_send_with_origin", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG SERVER SEND(ORIGIN)";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
if (getServer() != null) {
ModuleNetServer.Status s = getServer().getStatus();
if (s == ModuleNetServer.Status.RUNNING) {
status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
getServer().send(String.valueOf(args.get(0).getObj()), String.valueOf(args.get(1).getObj()));
return new RuntimeObject(true);
}
}
return new RuntimeObject(false);
}
});
// client
// -----------------------------------
info.addExternalFunc("g_net_msg_get_error", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG SERVER GET ERROR";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
return new RuntimeObject(lastError);
}
});
info.addExternalFunc("g_net_msg_get_server_msg", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG SERVER GET MESSAGE";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
return new RuntimeObject(getServer() == null ? null : getServer().getMessage());
}
});
info.addExternalFunc("g_net_msg_get_client_msg", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG CLIENT GET MESSAGE";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
return new RuntimeObject(getClient() == null ? null : getClient().getMessage());
}
});
info.addExternalFunc("g_net_msg_get_client_addr", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "MSG CLIENT GET ADDRESS";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
return new RuntimeObject(getClient() == null ? null : getClient().getAddr());
}
});
info.addExternalFunc("g_net_parse_json", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "Parse json";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
return parseJsonSafe(String.valueOf(args.get(0).getObj()));
}
});
info.addExternalFunc("g_net_get_rss", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "RSS GET(BAIDU)";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@SuppressWarnings("unchecked")
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
String text = "";
String txt = String.valueOf(args.get(0).getObj());
logger.debug("Request url(rss): " + txt);
RuntimeArray array = new RuntimeArray();
final Pattern pattern = Pattern.compile("<br>(.*)<br />");
try {
SAXReader reader = new SAXReader();
Document document = reader.read(txt);
Node title = document.selectSingleNode("//title");
array.add(new RuntimeObject(title.getText()));
List<Node> list = document.selectNodes("//item");
for (Node item : list) {
String itemTitle = item.valueOf("title");
array.add(new RuntimeObject(itemTitle));
String itemDescription = item.valueOf("description");
Matcher matcher = pattern.matcher(itemDescription);
if (matcher.find()) {
array.add(new RuntimeObject(matcher.group(1)));
} else {
array.add(new RuntimeObject(itemDescription.replace("<br />", "")));
}
}
return new RuntimeObject(array);
} catch (Exception e) {
e.printStackTrace();
}
return new RuntimeObject(array);
}
});
}
Aggregations