forked from yaphone/itchat4j
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
jogeen
committed
Apr 28, 2018
1 parent
f7b9389
commit 4a6c754
Showing
6 changed files
with
464 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,181 @@ | ||
package cn.zhouyafeng.itchat4j.beans; | ||
|
||
/** | ||
* @author www.jogeen.top | ||
* @date 2018年4月28日 | ||
* @version 1.0 | ||
*/ | ||
public class User { | ||
private String UserName; | ||
private int StarFriend; | ||
private String HeadImgUrl; | ||
private int Sex; | ||
private int AppAccountFlag; | ||
private String RemarkPYInitial; | ||
private String NickName; | ||
private int HeadImgFlag; | ||
private String PYQuanPin; | ||
private int WebWxPluginSwitch; | ||
private int SnsFlag; | ||
private int HideInputBarFlag; | ||
private String Signature; | ||
private String RemarkName; | ||
private String RemarkPYQuanPin; | ||
private long Uin; | ||
private int VerifyFlag; | ||
private String PYInitial; | ||
private int ContactFlag; | ||
|
||
public String getUserName() { | ||
return UserName; | ||
} | ||
|
||
public void setUserName(String userName) { | ||
UserName = userName; | ||
} | ||
|
||
public int getStarFriend() { | ||
return StarFriend; | ||
} | ||
|
||
public void setStarFriend(int starFriend) { | ||
StarFriend = starFriend; | ||
} | ||
|
||
public String getHeadImgUrl() { | ||
return HeadImgUrl; | ||
} | ||
|
||
public void setHeadImgUrl(String headImgUrl) { | ||
HeadImgUrl = headImgUrl; | ||
} | ||
|
||
public int getSex() { | ||
return Sex; | ||
} | ||
|
||
public void setSex(int sex) { | ||
Sex = sex; | ||
} | ||
|
||
public int getAppAccountFlag() { | ||
return AppAccountFlag; | ||
} | ||
|
||
public void setAppAccountFlag(int appAccountFlag) { | ||
AppAccountFlag = appAccountFlag; | ||
} | ||
|
||
public String getRemarkPYInitial() { | ||
return RemarkPYInitial; | ||
} | ||
|
||
public void setRemarkPYInitial(String remarkPYInitial) { | ||
RemarkPYInitial = remarkPYInitial; | ||
} | ||
|
||
public String getNickName() { | ||
return NickName; | ||
} | ||
|
||
public void setNickName(String nickName) { | ||
NickName = nickName; | ||
} | ||
|
||
public int getHeadImgFlag() { | ||
return HeadImgFlag; | ||
} | ||
|
||
public void setHeadImgFlag(int headImgFlag) { | ||
HeadImgFlag = headImgFlag; | ||
} | ||
|
||
public String getPYQuanPin() { | ||
return PYQuanPin; | ||
} | ||
|
||
public void setPYQuanPin(String pYQuanPin) { | ||
PYQuanPin = pYQuanPin; | ||
} | ||
|
||
public int getWebWxPluginSwitch() { | ||
return WebWxPluginSwitch; | ||
} | ||
|
||
public void setWebWxPluginSwitch(int webWxPluginSwitch) { | ||
WebWxPluginSwitch = webWxPluginSwitch; | ||
} | ||
|
||
public int getSnsFlag() { | ||
return SnsFlag; | ||
} | ||
|
||
public void setSnsFlag(int snsFlag) { | ||
SnsFlag = snsFlag; | ||
} | ||
|
||
public int getHideInputBarFlag() { | ||
return HideInputBarFlag; | ||
} | ||
|
||
public void setHideInputBarFlag(int hideInputBarFlag) { | ||
HideInputBarFlag = hideInputBarFlag; | ||
} | ||
|
||
public String getSignature() { | ||
return Signature; | ||
} | ||
|
||
public void setSignature(String signature) { | ||
Signature = signature; | ||
} | ||
|
||
public String getRemarkName() { | ||
return RemarkName; | ||
} | ||
|
||
public void setRemarkName(String remarkName) { | ||
RemarkName = remarkName; | ||
} | ||
|
||
public String getRemarkPYQuanPin() { | ||
return RemarkPYQuanPin; | ||
} | ||
|
||
public void setRemarkPYQuanPin(String remarkPYQuanPin) { | ||
RemarkPYQuanPin = remarkPYQuanPin; | ||
} | ||
|
||
public long getUin() { | ||
return Uin; | ||
} | ||
|
||
public void setUin(long uin) { | ||
Uin = uin; | ||
} | ||
|
||
public int getVerifyFlag() { | ||
return VerifyFlag; | ||
} | ||
|
||
public void setVerifyFlag(int verifyFlag) { | ||
VerifyFlag = verifyFlag; | ||
} | ||
|
||
public String getPYInitial() { | ||
return PYInitial; | ||
} | ||
|
||
public void setPYInitial(String pYInitial) { | ||
PYInitial = pYInitial; | ||
} | ||
|
||
public int getContactFlag() { | ||
return ContactFlag; | ||
} | ||
|
||
public void setContactFlag(int contactFlag) { | ||
ContactFlag = contactFlag; | ||
} | ||
|
||
} |
54 changes: 54 additions & 0 deletions
54
src/main/java/cn/zhouyafeng/itchat4j/thread/CheckMultiLoginStatusThread.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
package cn.zhouyafeng.itchat4j.thread; | ||
|
||
import java.util.Map; | ||
import java.util.Set; | ||
|
||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import cn.zhouyafeng.itchat4j.controller.MultiLoginController; | ||
import cn.zhouyafeng.itchat4j.core.Core; | ||
import cn.zhouyafeng.itchat4j.core.MultiCore; | ||
import cn.zhouyafeng.itchat4j.service.IMutilLoginService; | ||
import cn.zhouyafeng.itchat4j.utils.SleepUtils; | ||
|
||
/** | ||
* 检查微信在线状态 | ||
* <p> | ||
* 如何来感知微信状态? | ||
* 微信会有心跳包,LoginServiceImpl.syncCheck()正常在线情况下返回的消息中retcode报文应该为"0",心跳间隔一般在25秒, | ||
* 那么可以通过最后收到正常报文的时间来作为判断是否在线的依据。若报文间隔大于60秒,则认为已掉线。 | ||
* </p> | ||
* | ||
* @author https://github.com/yaphone | ||
* @date 创建时间:2017年5月17日 下午10:53:15 | ||
* @version 1.0 | ||
* | ||
*/ | ||
public class CheckMultiLoginStatusThread implements Runnable { | ||
private static Logger LOG = LoggerFactory.getLogger(CheckMultiLoginStatusThread.class); | ||
private MultiLoginController multiLoginController = MultiLoginController.getInstance(); | ||
|
||
@Override | ||
public void run() { | ||
Map<String, IMutilLoginService> serviceMap = multiLoginController.getOnLineServiceMap(); | ||
while (true) { | ||
if(!serviceMap.isEmpty()) { | ||
Set<String> keySet = serviceMap.keySet(); | ||
for (String key : keySet) { | ||
IMutilLoginService mutilLoginService = serviceMap.get(key); | ||
MultiCore multiCore = mutilLoginService.getMultiCore(); | ||
long t1 = System.currentTimeMillis(); // 秒为单位 | ||
if (t1 - multiCore.getLastNormalRetcodeTime() > 60 * 1000) { // 超过60秒,判为离线 | ||
multiCore.setAlive(false); | ||
LOG.info("{},微信已离线", key); | ||
serviceMap.remove(key); | ||
} | ||
} | ||
} | ||
LOG.info("当前在线用户数:,{}", serviceMap.size()); | ||
SleepUtils.sleep(10 * 1000); // 休眠10秒 | ||
} | ||
} | ||
|
||
} |
60 changes: 60 additions & 0 deletions
60
src/main/java/cn/zhouyafeng/itchat4j/thread/ScanWaitMultiLoginThread.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package cn.zhouyafeng.itchat4j.thread; | ||
|
||
import java.util.Map; | ||
import java.util.Set; | ||
|
||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import cn.zhouyafeng.itchat4j.controller.MultiLoginController; | ||
import cn.zhouyafeng.itchat4j.core.MultiCore; | ||
import cn.zhouyafeng.itchat4j.service.IMutilLoginService; | ||
import cn.zhouyafeng.itchat4j.utils.SleepUtils; | ||
|
||
public class ScanWaitMultiLoginThread implements Runnable { | ||
private static Logger LOG = LoggerFactory.getLogger(ScanWaitMultiLoginThread.class); | ||
private MultiLoginController multiLoginController = MultiLoginController.getInstance(); | ||
|
||
@Override | ||
public void run() { | ||
Map<String, IMutilLoginService> waitServiceMap = multiLoginController.getWaitServiceMap(); | ||
Map<String, IMutilLoginService> onLineServiceMap = multiLoginController.getOnLineServiceMap(); | ||
while (true) { | ||
if (waitServiceMap.isEmpty()) { | ||
continue; | ||
} | ||
Set<String> keySet = waitServiceMap.keySet(); | ||
for (String key : keySet) { | ||
IMutilLoginService mutilLoginService = waitServiceMap.get(key); | ||
MultiCore core = mutilLoginService.getMultiCore(); | ||
if (!core.isAlive()) { | ||
mutilLoginService.login(); | ||
if (!mutilLoginService.webWxInit()) { | ||
LOG.info("6. 微信初始化异常"); | ||
waitServiceMap.remove(key); | ||
continue; | ||
} | ||
LOG.info("6. 开启微信状态通知"); | ||
mutilLoginService.wxStatusNotify(); | ||
LOG.info(String.format("欢迎回来, %s", core.getNickName())); | ||
LOG.info("8. 开始接收消息"); | ||
mutilLoginService.startReceiving(); | ||
LOG.info("9. 获取联系人信息"); | ||
mutilLoginService.webWxGetContact(); | ||
LOG.info("10. 获取群好友及群好友列表"); | ||
mutilLoginService.WebWxBatchGetContact(); | ||
core.setAlive(true); | ||
waitServiceMap.remove(key); | ||
onLineServiceMap.put(key, mutilLoginService); | ||
LOG.info(("登陆成功")); | ||
} else { | ||
waitServiceMap.remove(key); | ||
LOG.info("4. 登陆超时,请重新扫描二维码图片"); | ||
} | ||
|
||
} | ||
SleepUtils.sleep(1000); // 休眠10秒 | ||
} | ||
} | ||
|
||
} |
16 changes: 16 additions & 0 deletions
16
src/main/java/cn/zhouyafeng/itchat4j/utils/enums/QRType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package cn.zhouyafeng.itchat4j.utils.enums; | ||
|
||
public enum QRType { | ||
OPEN_SHOW("直接打开展示"), BASE64_STRING("BASE64字符串"); | ||
|
||
private String msg; | ||
|
||
QRType(String msg) { | ||
this.msg = msg; | ||
} | ||
|
||
public String getMsg() { | ||
return msg; | ||
} | ||
|
||
} |
Oops, something went wrong.