📄 basicfamilyprocessor.java
字号:
e.type = QQEvent.QQ_DELETE_FRIEND_SUCCESS;
client.fireQQEvent(e);
}
}
/**
* 处理请求加一个好友的回复包
*
* @param in
*/
private void processAddFriendReply(BasicInPacket in) {
QQEvent e;
AddFriendReplyPacket packet = (AddFriendReplyPacket)in;
if(packet.replyCode == QQ.QQ_AUTH_NO_AUTH) {
log.debug("好友添加成功");
e = new QQEvent(monitor.retrieveRequest(packet));
e.type = QQEvent.QQ_ADD_FRIEND_SUCCESS;
client.fireQQEvent(e);
} else if(packet.replyCode == QQ.QQ_AUTH_NEED_AUTH) {
log.debug("对方要求认证");
e = new QQEvent(monitor.retrieveRequest(packet));
e.type = QQEvent.QQ_ADD_FRIEND_NEED_AUTH;
client.fireQQEvent(e);
} else if(packet.replyCode == QQ.QQ_AUTH_NO_ADD) {
log.debug("对方禁止别人加他为好友");
e = new QQEvent(monitor.retrieveRequest(packet));
e.type = QQEvent.QQ_ADD_FRIEND_DENY;
client.fireQQEvent(e);
}
}
/**
* 处理系统消息,比如谁谁谁添加你为好友
*
* @param in
*/
private void processSystemNotification(BasicInPacket in) {
QQEvent e = null;
SystemNotificationPacket packet = (SystemNotificationPacket)in;
// 判断类型
if(packet.type == QQ.QQ_MSG_SYS_BEING_ADDED) {
e = new QQEvent(packet);
e.type = QQEvent.QQ_ADDED_BY_OTHERS;
} else if(packet.type == QQ.QQ_MSG_SYS_ADD_FRIEND_REQUEST) {
e = new QQEvent(packet);
e.type = QQEvent.QQ_REQUEST_ADD_ME;
} else if(packet.type == QQ.QQ_MSG_SYS_ADD_FRIEND_APPROVED) {
e = new QQEvent(packet);
e.type = QQEvent.QQ_REQUEST_ADD_OTHER_APPROVED;
} else if(packet.type == QQ.QQ_MSG_SYS_ADD_FRIEND_REJECTED) {
e = new QQEvent(packet);
e.type = QQEvent.QQ_REQUEST_ADD_OTHER_REJECTED;
} else {
log.debug("未知类型的系统通知,忽略");
}
// 触发事件
if(e != null)
client.fireQQEvent(e);
}
/**
* 处理未知命令,没有实际操作,简单打印内容
*
* @param in
*/
private void processRequestKeyReply(BasicInPacket in) {
RequestKeyReplyPacket packet = (RequestKeyReplyPacket)in;
QQEvent e;
if(packet.replyCode == QQ.QQ_REQUEST_KEY_REPLY_OK) {
e = new QQEvent(packet);
e.type = QQEvent.QQ_REQUEST_KEY_SUCCESS;
client.fireQQEvent(e);
} else {
e = new QQEvent(monitor.retrieveRequest(packet));
e.type = QQEvent.QQ_REQUEST_KEY_FAIL;
client.fireQQEvent(e);
}
}
/**
* 处理收到的消息
*
* @param in
*/
private void processReceiveIM(BasicInPacket in) {
QQEvent e;
if(!(in instanceof ReceiveIMPacket))
return;
ReceiveIMPacket packet = (ReceiveIMPacket)in;
if(packet.isDuplicated()) {
log.debug("收到一条重复消息,发送确认");
e = new QQEvent(packet);
e.type = QQEvent.QQ_RECEIVE_DUPLICATED_IM;
client.fireQQEvent(e);
return;
}
// 开始处理
if(packet.header.type == QQ.QQ_RECV_IM_FROM_FRIEND || packet.header.type == QQ.QQ_RECV_IM_FROM_STRANGER) {
e = new QQEvent(packet);
switch(packet.normalHeader.type) {
case QQ.QQ_IM_NORMAL_TEXT:
e.type = QQEvent.QQ_RECEIVE_NORMAL_IM;
break;
case QQ.QQ_IM_UDP_REQUEST:
log.debug("对方请求传送文件,协议UDP" + " 传送文件端口:" + packet.fileArgs.majorPort);
e.type = QQEvent.QQ_REQUEST_SEND_FILE;
break;
case QQ.QQ_IM_REJECT_UDP_REQUEST:
log.debug("对方拒绝了传送文件的请求");
e.type = QQEvent.QQ_REJECT_SEND_FILE;
break;
case QQ.QQ_IM_ACCEPT_UDP_REQUEST:
log.debug("对方接受了传送文件的请求");
e.type = QQEvent.QQ_ACCEPT_SEND_FILE;
break;
case QQ.QQ_IM_NOTIFY_IP:
log.debug("对方告诉我文件发送的IP和端口,其外部IP为" + Util.getIpStringFromBytes(packet.fileArgs.internetIp) +
" 其外部端口为" + packet.fileArgs.internetPort + " 其主端口为" + packet.fileArgs.majorPort +
" 其真实IP为" + Util.getIpStringFromBytes(packet.fileArgs.localIp) +
" 其副端口为" + packet.fileArgs.minorPort);
e.type = QQEvent.QQ_NOTIFY_FILE_TRANSFER_ARGS;
break;
case QQ.QQ_IM_ARE_YOU_BEHIND_FIREWALL:
log.debug("对方请求自己主动连接他");
e.type = QQEvent.QQ_REQUEST_ME_CONNECT;
break;
case QQ.QQ_IM_REQUEST_CANCELED:
log.debug("对方取消了文件传送");
e.type = QQEvent.QQ_CANCEL_SEND_FILE;
break;
default:
log.debug("接受到一条非文本消息,目前无法处理,忽略该消息");
e.type = QQEvent.QQ_UNKNOWN_TYPE_IM;
break;
}
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_SMS) {
log.debug("接受到一条来自普通手机绑定用户的短信: " + packet.sms.message);
e = new QQEvent(packet);
e.type = QQEvent.QQ_RECEIVE_SMS;
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_MOBILE_QQ) {
log.debug("接受到一条来自移动QQ用户的短信: " + packet.sms.message);
e = new QQEvent(packet);
e.type = QQEvent.QQ_RECEIVE_SMS;
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_SYS_MESSAGE) {
log.debug("接收到一条系统消息: " + packet.sysMessage);
if(packet.systemMessageType == QQ.QQ_RECV_IM_KICK_OUT) {
e = new QQEvent(packet);
e.type = QQEvent.QQ_KICKED_OUT_BY_SYSTEM;
client.fireQQEvent(e);
} else {
e = new QQEvent(packet);
e.type = QQEvent.QQ_RECEIVE_SYS_MESSAGE;
client.fireQQEvent(e);
}
} else if(packet.header.type == QQ.QQ_RECV_IM_CLUSTER_IM) {
e = new QQEvent(packet);
e.type = QQEvent.QQ_RECEIVE_CLUSTER_IM;
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_TEMP_CLUSTER_IM) {
e = new QQEvent(packet);
e.type = QQEvent.QQ_RECEIVE_TEMP_CLUSTER_IM;
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_UNKNOWN_CLUSTER_IM) {
e = new QQEvent(packet);
e.type = QQEvent.QQ_RECEIVE_UNKNOWN_CLUSTER_IM;
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_CREATE_CLUSTER ||
packet.header.type == QQ.QQ_RECV_IM_ADDED_TO_CLUSTER) {
log.debug("收到一条" + Util.getIMTypeString(packet.header.type) + "消息");
e = new QQEvent(packet);
e.type = QQEvent.QQ_I_AM_ADDED_TO_CLUSTER;
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_DELETED_FROM_CLUSTER) {
log.debug("我被创建者从群中删除");
e = new QQEvent(packet);
e.type = QQEvent.QQ_I_AM_REMOVED_FROM_CLUSTER;
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_APPROVE_JOIN_CLUSTER) {
log.debug("对方同意我加入群,附加消息为:" + packet.message);
e = new QQEvent(packet);
e.type = QQEvent.QQ_REQUEST_JOIN_CLUSTER_APPROVED;
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_REJECT_JOIN_CLUSTER) {
log.debug("对方拒绝我加入群,附加消息为:" + packet.message);
e = new QQEvent(packet);
e.type = QQEvent.QQ_REQUEST_JOIN_CLUSTER_REJECTED;
client.fireQQEvent(e);
} else if(packet.header.type == QQ.QQ_RECV_IM_REQUEST_JOIN_CLUSTER) {
log.debug("对方请求加入我的群,附加消息为:" + packet.message);
e = new QQEvent(packet);
e.type = QQEvent.QQ_REQUEST_JOIN_CLUSTER;
client.fireQQEvent(e);
} else {
log.debug("接收到一条" + Util.getIMTypeString(packet.header.type) + "消息,目前无法处理,忽略");
}
}
/**
* 处理Keep Alive的回复事件
*
* @param in
*/
private void processKeepAliveReply(BasicInPacket in) {
QQEvent e;
KeepAliveReplyPacket packet = (KeepAliveReplyPacket)in;
if(log.isDebugEnabled()) {
log.debug("Keep Alive: 在线数: " + packet.onlines + "我的IP: " + packet.ip);
}
// 触发事件
e = new QQEvent(packet);
e.type = QQEvent.QQ_KEEP_ALIVE_SUCCESS;
client.fireQQEvent(e);
}
/**
* 处理发送消息回复事件
*
* @param in
*/
private void processSendIMReply(BasicInPacket in) {
QQEvent e;
SendIMReplyPacket packet = (SendIMReplyPacket)in;
if(packet.replyCode == QQ.QQ_SEND_IM_REPLY_OK) {
SendIMPacket srcPacket = (SendIMPacket)monitor.retrieveRequest(packet);
char messageType = srcPacket.getMessageType();
if(messageType == QQ.QQ_IM_NORMAL_TEXT) {
log.debug("消息发送成功");
e = new QQEvent(srcPacket);
e.type = QQEvent.QQ_SEND_IM_SUCCESS;
client.fireQQEvent(e);
} else if(messageType == QQ.QQ_IM_UDP_REQUEST) {
log.debug("传送文件请求已发送,等待对方接受");
e = new QQEvent(srcPacket);
e.type = QQEvent.QQ_SEND_FILE_REQUEST_SEND_SUCCESS;
client.fireQQEvent(e);
} else if(messageType == QQ.QQ_IM_NOTIFY_IP) {
log.debug("IP信息已发送,等待对方返回确认");
}
}
}
/**
* 处理得到在线好友回复事件
*
* @param in
*/
private void processGetFriendOnlineReply(BasicInPacket in) {
QQEvent e;
GetFriendOnlineReplyPacket packet = (GetFriendOnlineReplyPacket)in;
/*if(log.isDebugEnabled()) {
Iterator iter = packet.onlineFriends.iterator();
while(iter.hasNext()) {
FriendStatus fs = ((FriendOnlineEntry)iter.next()).status;
log.debug("好友" + fs.qqNum + "在线状态" + Utils.getStatusString(fs.status));
}
}*/
e = new QQEvent(packet);
e.type = QQEvent.QQ_GET_FRIEND_ONLINE_SUCCESS;
client.fireQQEvent(e);
}
/**
* 处理得到好友列表回复事件
*
* @param in
*/
private void processGetFriendListReply(BasicInPacket in) {
QQEvent e;
GetFriendListReplyPacket packet = (GetFriendListReplyPacket)in;
/*if(log.isDebugEnabled()) {
Iterator iter = packet.friends.iterator();
while(iter.hasNext()) {
QQFriend friend = (QQFriend)iter.next();
log.debug("得到好友" + friend.qqNum + ", 昵称: " + friend.nick);
}
}*/
// 触发事件
e = new QQEvent(packet);
e.type = QQEvent.QQ_GET_FRIEND_LIST_SUCCESS;
client.fireQQEvent(e);
}
/**
* 处理改变状态回复事件
*
* @param in
*/
private void processChangeStatusReply(BasicInPacket in) {
QQEvent e;
ChangeStatusReplyPacket packet = (ChangeStatusReplyPacket)in;
// 检查应答码
if(packet.replyCode == QQ.QQ_CHANGE_STATUS_REPLY_OK) {
log.debug("改变状态成功");
e = new QQEvent(packet);
e.type = QQEvent.QQ_CHANGE_STATUS_SUCCESS;
client.fireQQEvent(e);
} else {
log.debug("改变状态失败");
e = new QQEvent(packet);
e.type = QQEvent.QQ_CHANGE_STATUS_FAIL;
client.fireQQEvent(e);
}
}
/**
* 处理得到用户信息回复事件
*
* @param in
*/
private void processGetUserInfoReply(BasicInPacket in) {
QQEvent e;
GetUserInfoReplyPacket packet = (GetUserInfoReplyPacket)in;
/*if(log.isDebugEnabled()) {
for(int i = 0; i < QQ.QQ_CONTACT_FIELDS; i++)
log.debug("用户信息字段" + i + ": " + packet.contactInfo.infos[i]);
}*/
// 触发成功事件
e = new QQEvent(packet);
e.type = QQEvent.QQ_GET_USER_INFO_SUCCESS;
client.fireQQEvent(e);
}
/**
* 处理好友状态改变事件
*
* @param in
*/
private void processFriendChangeStatus(BasicInPacket in) {
QQEvent e;
FriendChangeStatusPacket packet = (FriendChangeStatusPacket)in;
if(packet.friendStatus.qqNum == 0) {
log.warn("好友状态改变包中数据有误,忽略该包");
} else {
log.debug("好友" + packet.friendStatus.qqNum + "状态改变成" + Util.getStatusString(packet.friendStatus.status));
// 触发事件
e = new QQEvent(packet);
e.type = QQEvent.QQ_FRIEND_CHANGE_STATUS;
client.fireQQEvent(e);
}
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.qq.events.IPacketListener#accept(byte)
*/
public boolean accept(byte header) {
return header == QQ.QQ_HEADER_BASIC_FAMILY;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -