Search in sources :

Example 1 with ModuleNetClient

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);
        }
    });
}
Also used : Pattern(java.util.regex.Pattern) RuntimeArray(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray) InputStreamReader(java.io.InputStreamReader) ModuleNetClient(priv.bajdcc.LALR1.interpret.module.net.ModuleNetClient) Matcher(java.util.regex.Matcher) SAXReader(org.dom4j.io.SAXReader) Node(org.dom4j.Node) Document(org.dom4j.Document) URL(java.net.URL) URLConnection(java.net.URLConnection) BufferedReader(java.io.BufferedReader) List(java.util.List) ModuleNetServer(priv.bajdcc.LALR1.interpret.module.net.ModuleNetServer)

Aggregations

BufferedReader (java.io.BufferedReader)1 InputStreamReader (java.io.InputStreamReader)1 URL (java.net.URL)1 URLConnection (java.net.URLConnection)1 List (java.util.List)1 Matcher (java.util.regex.Matcher)1 Pattern (java.util.regex.Pattern)1 Document (org.dom4j.Document)1 Node (org.dom4j.Node)1 SAXReader (org.dom4j.io.SAXReader)1 RuntimeArray (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray)1 ModuleNetClient (priv.bajdcc.LALR1.interpret.module.net.ModuleNetClient)1 ModuleNetServer (priv.bajdcc.LALR1.interpret.module.net.ModuleNetServer)1