|
|
@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
package xyz.wbsite.itchat4j;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.io.FileUtil;
|
|
|
|
|
|
|
|
import cn.zhouyafeng.itchat4j.Wechat;
|
|
|
|
|
|
|
|
import xyz.wbsite.itchat4j.util.Logger;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 服务线程
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @author wangbing
|
|
|
|
|
|
|
|
* @version 0.0.1
|
|
|
|
|
|
|
|
* @since 1.8
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
public class JMainService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 单例对象
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private static JMainService instance;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static Wechat wechat;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static synchronized JMainService getInstance() {
|
|
|
|
|
|
|
|
if (instance == null) {
|
|
|
|
|
|
|
|
JMainService.instance = new JMainService();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return instance;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 服务运行状态
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
public boolean run;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 守护线程
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
public LoginThread loginThread;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 服务内部构造器
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private JMainService() {
|
|
|
|
|
|
|
|
Logger.info("初始化服务");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void init() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void createDaemon() {
|
|
|
|
|
|
|
|
Logger.info("初始化线程");
|
|
|
|
|
|
|
|
this.loginThread = new LoginThread();
|
|
|
|
|
|
|
|
this.loginThread.setDaemon(true);
|
|
|
|
|
|
|
|
Logger.info("启动线程");
|
|
|
|
|
|
|
|
this.run = true;
|
|
|
|
|
|
|
|
this.loginThread.start();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static boolean start() {
|
|
|
|
|
|
|
|
if (JMainService.getInstance().run) {
|
|
|
|
|
|
|
|
Logger.info("服务已启动");
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 创建线程
|
|
|
|
|
|
|
|
JMainService.getInstance().createDaemon();
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static boolean stop() {
|
|
|
|
|
|
|
|
if (!JMainService.getInstance().run) {
|
|
|
|
|
|
|
|
Logger.info("服务未启动");
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 停止服务
|
|
|
|
|
|
|
|
JMainService.getInstance().run = false;
|
|
|
|
|
|
|
|
// 关闭守护线程
|
|
|
|
|
|
|
|
JMainService.getInstance().loginThread.interrupt();
|
|
|
|
|
|
|
|
Logger.info("正在停止脚本");
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 登录线程
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
public class LoginThread extends Thread {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void run() {
|
|
|
|
|
|
|
|
// 保存登陆二维码图片的路径,这里需要在本地新建目录
|
|
|
|
|
|
|
|
File qrPath = FileUtil.mkdir(new File(FileUtil.getTmpDir(), "itchat4j"));
|
|
|
|
|
|
|
|
wechat = new Wechat(new JMsgHandler(), qrPath.getAbsolutePath());
|
|
|
|
|
|
|
|
// 启动服务,会在qrPath下生成一张二维码图片,扫描即可登陆,注意,二维码图片如果超过一定时间未扫描会过期,过期时会自动更新,所以你可能需要重新打开图片
|
|
|
|
|
|
|
|
wechat.start();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|