Skip to content

Commit

Permalink
补充提交
Browse files Browse the repository at this point in the history
  • Loading branch information
jogeen committed Apr 28, 2018
1 parent f7b9389 commit 4a6c754
Show file tree
Hide file tree
Showing 6 changed files with 464 additions and 0 deletions.
53 changes: 53 additions & 0 deletions src/main/java/cn/zhouyafeng/itchat4j/Wechat.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.zhouyafeng.itchat4j.beans.BaseMsg;
import cn.zhouyafeng.itchat4j.controller.LoginController;
import cn.zhouyafeng.itchat4j.core.MsgCenter;
import cn.zhouyafeng.itchat4j.face.IMsgHandlerFace;
Expand All @@ -29,5 +30,57 @@ public void run() {
}
}).start();
}
public static void main(String[] args) {
new Wechat(new IMsgHandlerFace() {

@Override
public String voiceMsgHandle(BaseMsg msg) {
// TODO Auto-generated method stub
return null;
}

@Override
public String viedoMsgHandle(BaseMsg msg) {
// TODO Auto-generated method stub
return null;
}

@Override
public String verifyAddFriendMsgHandle(BaseMsg msg) {
// TODO Auto-generated method stub
return null;
}

@Override
public String textMsgHandle(BaseMsg msg) {
// TODO Auto-generated method stub
return null;
}

@Override
public void sysMsgHandle(BaseMsg msg) {
// TODO Auto-generated method stub

}

@Override
public String picMsgHandle(BaseMsg msg) {
// TODO Auto-generated method stub
return null;
}

@Override
public String nameCardMsgHandle(BaseMsg msg) {
// TODO Auto-generated method stub
return null;
}

@Override
public String mediaMsgHandle(BaseMsg msg) {
// TODO Auto-generated method stub
return null;
}
},"").start();
}

}
181 changes: 181 additions & 0 deletions src/main/java/cn/zhouyafeng/itchat4j/beans/User.java
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;
}

}
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秒
}
}

}
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 src/main/java/cn/zhouyafeng/itchat4j/utils/enums/QRType.java
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;
}

}
Loading

0 comments on commit 4a6c754

Please sign in to comment.