/** * 执行shell命令 * * @param cmd * @return */ public static String execute(String cmd, long timeout) { try { String[] cmds = null; if (cmd.startsWith("sh -c ")) { cmd = cmd.substring(6).trim(); cmds = new String[] {"sh", "-c", cmd}; } String line = ""; Process process = null; if (cmds == null) { process = Runtime.getRuntime().exec(cmd); } else { process = Runtime.getRuntime().exec(cmds); } try { // 等待进程退出 if (timeout <= 0) { process.waitFor(); } else { synchronized (process) { process.wait(timeout); } } StringBuilder builder = new StringBuilder(4096); BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); while ((line = input.readLine()) != null) { builder.append(line).append("\r\n"); } input.close(); String result = builder.toString(); if (result == null || result.length() <= 0) { result = "success"; } return result; } catch (Exception e) { HawkException.catchException(e); } finally { process.destroy(); } } catch (Exception e) { HawkException.catchException(e); } return "failed"; }
/** * 实际解析协议模板 * * @param protocol * @param template * @return */ @SuppressWarnings("unchecked") public <T extends GeneratedMessage> T parseProtocol(HawkProtocol protocol, T template) { if (protocol != null && template != null) { try { T pbProtocol = template; Parser<T> parser = (Parser<T>) parsers.get(template.getClass().getName()); if (parser == null) { parser = (Parser<T>) template.getClass().getField("PARSER").get(template); parsers.put(template.getClass().getName(), parser); } if (protocol.getSize() > 0) { pbProtocol = parser.parseFrom(protocol.getOctets().getBuffer().array(), 0, protocol.getSize()); } logProtocolBuilder(protocol, pbProtocol); return pbProtocol; } catch (Exception e) { HawkException.catchException(e); // 抛出运行时异常 throw new RuntimeException("protocol parse exception: " + protocol.getType()); } } return null; }
/** * 格式: * game=%s&platform=%s&server=%s&puid=%s&device=%s&playerid=%d&playerlevel=%d&changetype=%d&changeaction=%s&goldtype=%d&gold=%d&time=%s */ @Override public void handle(HttpExchange httpExchange) throws IOException { try { Map<String, String> params = CollectorHttpServer.parseHttpParam(httpExchange); Collector.checkToken(params.get("token")); doReport(params); } catch (Exception e) { HawkException.catchException(e); } finally { CollectorHttpServer.response(httpExchange, null); } }
@Override @SuppressWarnings("unused") public void handle(HttpExchange httpExchange) throws IOException { try { String contentBody = HawkOSOperator.readRequestBody(httpExchange).replace("\r", ""); int pos = contentBody.indexOf("\n"); if (pos > 0) { int index = 0; String header = contentBody.substring(0, pos).trim(); String items[] = header.split("\\^"); if (items.length >= 7) { String md5 = ""; int stackPos = contentBody.indexOf("stack traceback"); if (stackPos > 0) { md5 = HawkMd5.makeMD5(contentBody.substring(stackPos)); } else { md5 = HawkMd5.makeMD5(contentBody); } if (logMd5Map.containsKey(md5)) { return; } logMd5Map.put(md5, md5); HawkLog.logPrintln("\r\nUserLog: " + contentBody); String game = items[index++]; String logtype = items[index++]; String platform = items[index++]; String serverid = items[index++]; String puid = items[index++]; String phoneinfo = items[index++]; String sysinfo = items[index++]; if (game.length() > 0 && logtype.length() > 0 && platform.length() > 0 && serverid.length() > 0 && puid.length() > 0) { // 创建日志目录 String dir = HawkOSOperator.getWorkPath() + "userlog/" + game + "/" + logtype + "/"; HawkOSOperator.createDir(dir); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd.HHmmss"); String tm = sdf.format(HawkTime.getDate()); String fileName = String.format("%s%s.%s.%s.%s", dir, platform, serverid, puid, tm); HawkOSOperator.saveAsFile(contentBody, fileName); } } } } catch (Exception e) { HawkException.catchException(e); } }
@Override public void handle(HttpExchange httpExchange) throws IOException { try { String method = httpExchange.getRequestMethod(); if ("GET".equals(method)) { doGet(httpExchange); } else if ("POST".equals(method)) { doPost(httpExchange); } } catch (Exception e) { HawkException.catchException(e); } finally { httpExchange.close(); } }
/** * 实际解析协议模板 * * @param protocol * @return */ public HawkPacket parsePacket(HawkProtocol protocol) { if (protocol != null) { try { HawkPacket packet = createPacket(protocol.getType()); if (packet != null) { packet.unmarshal(protocol.getOctets()); return packet; } // 协议存根不存在 throw new RuntimeException("packet stub illegal: " + protocol.getType()); } catch (Exception e) { HawkException.catchException(e); // 抛出运行时异常 throw new RuntimeException("packet parse exception: " + protocol.getType()); } } return null; }
/** * 实际解析协议模板 * * @param protocol * @param template * @return */ @SuppressWarnings("unchecked") public <T extends GeneratedMessage> T parseFromJson(HawkProtocol protocol, T template) { if (protocol != null && template != null) { try { T pbProtocol = template; if (protocol.getSize() > 0) { String pbJson = new String(protocol.getOctets().getBuffer().array(), 0, protocol.getSize()); GeneratedMessage.Builder<?> builder = (Builder<?>) template.newBuilderForType(); JsonFormat.merge(pbJson, builder); pbProtocol = (T) builder.build(); } logProtocolBuilder(protocol, pbProtocol); return pbProtocol; } catch (Exception e) { HawkException.catchException(e); // 抛出运行时异常 throw new RuntimeException("protocol parse exception: " + protocol.getType()); } } return null; }