Enable starting client from local
This commit is contained in:
parent
5b44d24b58
commit
9b51150c51
@ -6,6 +6,7 @@ import io.sisu.nng.pair.Pair1Socket;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -21,17 +22,38 @@ public class Client {
|
|||||||
private Socket msgSocket = null;
|
private Socket msgSocket = null;
|
||||||
private String cmdUrl = "tcp://127.0.0.1:10086";
|
private String cmdUrl = "tcp://127.0.0.1:10086";
|
||||||
private boolean isReceivingMsg = false;
|
private boolean isReceivingMsg = false;
|
||||||
|
private boolean isLocalHostPort = false;
|
||||||
private BlockingQueue<WxMsg> msgQ;
|
private BlockingQueue<WxMsg> msgQ;
|
||||||
|
private String wcfPath;
|
||||||
|
|
||||||
public Client(String hostPort) {
|
public Client(String hostPort) {
|
||||||
cmdUrl = hostPort;
|
cmdUrl = hostPort;
|
||||||
connectRPC(hostPort);
|
connectRPC(cmdUrl);
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
}
|
||||||
public void run() {
|
|
||||||
logger.info("关闭...");
|
public Client(boolean debug) {
|
||||||
diableRecvMsg();
|
try {
|
||||||
|
URL url = this.getClass().getResource("/win32-x86-64/wcf.exe");
|
||||||
|
wcfPath = url.getFile();
|
||||||
|
String[] cmd = new String[3];
|
||||||
|
cmd[0] = wcfPath;
|
||||||
|
cmd[1] = "start";
|
||||||
|
if (debug) {
|
||||||
|
cmd[2] = "debug";
|
||||||
|
} else {
|
||||||
|
cmd[2] = "";
|
||||||
}
|
}
|
||||||
});
|
int status = Runtime.getRuntime().exec(cmd).waitFor();
|
||||||
|
if (status != 0) {
|
||||||
|
logger.error("启动 RPC 失败: {}", status);
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
isLocalHostPort = true;
|
||||||
|
connectRPC(cmdUrl);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("初始化失败: {}", e);
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void connectRPC(String url) {
|
private void connectRPC(String url) {
|
||||||
@ -46,6 +68,26 @@ public class Client {
|
|||||||
logger.error("连接 RPC 失败: ", e);
|
logger.error("连接 RPC 失败: ", e);
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||||
|
public void run() {
|
||||||
|
logger.info("关闭...");
|
||||||
|
diableRecvMsg();
|
||||||
|
if (isLocalHostPort) {
|
||||||
|
try {
|
||||||
|
String[] cmd = new String[2];
|
||||||
|
cmd[0] = wcfPath;
|
||||||
|
cmd[1] = "stop";
|
||||||
|
Process process = Runtime.getRuntime().exec(cmd);
|
||||||
|
int status = process.waitFor();
|
||||||
|
if (status != 0) {
|
||||||
|
System.err.println("停止机器人失败: " + status);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private Response sendCmd(Request req) {
|
private Response sendCmd(Request req) {
|
||||||
@ -175,8 +217,7 @@ public class Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int sendXml(String receiver, String xml, String path, int type) {
|
public int sendXml(String receiver, String xml, String path, int type) {
|
||||||
Wcf.XmlMsg xmlMsg = Wcf.XmlMsg.newBuilder().setContent(xml).setReceiver(receiver).setPath(path).setType(type)
|
Wcf.XmlMsg xmlMsg = Wcf.XmlMsg.newBuilder().setContent(xml).setReceiver(receiver).setPath(path).setType(type).build();
|
||||||
.build();
|
|
||||||
Request req = new Request.Builder().setFuncValue(Functions.FUNC_SEND_XML_VALUE).setXml(xmlMsg).build();
|
Request req = new Request.Builder().setFuncValue(Functions.FUNC_SEND_XML_VALUE).setXml(xmlMsg).build();
|
||||||
logger.debug("sendXml: {}", bytesToHex(req.toByteArray()));
|
logger.debug("sendXml: {}", bytesToHex(req.toByteArray()));
|
||||||
Response rsp = sendCmd(req);
|
Response rsp = sendCmd(req);
|
||||||
@ -301,14 +342,12 @@ public class Client {
|
|||||||
gender = "未知";
|
gender = "未知";
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info("{}, {}, {}, {}, {}, {}, {}", c.getWxid(), c.getName(), c.getCode(), c.getCountry(),
|
logger.info("{}, {}, {}, {}, {}, {}, {}", c.getWxid(), c.getName(), c.getCode(), c.getCountry(), c.getProvince(), c.getCity(), gender);
|
||||||
c.getProvince(), c.getCity(), gender);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void printWxMsg(WxMsg msg) {
|
public void printWxMsg(WxMsg msg) {
|
||||||
logger.info("{}[{}]:{}:{}:{}\n{}", msg.getSender(), msg.getRoomid(), msg.getId(), msg.getType(),
|
logger.info("{}[{}]:{}:{}:{}\n{}", msg.getSender(), msg.getRoomid(), msg.getId(), msg.getType(), msg.getXml().replace("\n", "").replace("\t", ""), msg.getContent());
|
||||||
msg.getXml().replace("\n", "").replace("\t", ""), msg.getContent());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String bytesToHex(byte[] bytes) {
|
public String bytesToHex(byte[] bytes) {
|
||||||
|
@ -7,12 +7,16 @@ public class Main {
|
|||||||
private static Logger logger = LoggerFactory.getLogger(Main.class);
|
private static Logger logger = LoggerFactory.getLogger(Main.class);
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
final String url = "tcp://192.168.1.104:10086";
|
// 连接远程 RPC
|
||||||
Client client = new Client(url);
|
// final String url = "tcp://192.168.1.104:10086";
|
||||||
|
// Client client = new Client(url);
|
||||||
|
|
||||||
|
// 本地启动 RPC
|
||||||
|
Client client = new Client(true);
|
||||||
|
|
||||||
// 是否已登录
|
// 是否已登录
|
||||||
logger.info("isLogin: {}", client.isLogin());
|
logger.info("isLogin: {}", client.isLogin());
|
||||||
|
/*
|
||||||
// 登录账号 wxid
|
// 登录账号 wxid
|
||||||
logger.info("wxid: {}", client.getSelfWxid());
|
logger.info("wxid: {}", client.getSelfWxid());
|
||||||
|
|
||||||
@ -53,6 +57,6 @@ public class Main {
|
|||||||
thread.start();
|
thread.start();
|
||||||
// client.diableRecvMsg(); // 需要停止时调用
|
// client.diableRecvMsg(); // 需要停止时调用
|
||||||
|
|
||||||
client.keepRunning();
|
client.keepRunning();*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user