📄 qqclient.java
字号:
AddFriendAuthPacket packet = new AddFriendAuthPacket();
packet.setTo(qqNum);
packet.setType(QQ.QQ_MY_AUTH_APPROVE);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 创建一个临时群
* @param name 群名称
* @param notice 群声明
* @param description 群描述
* @param members 成员QQ号数组
* @param category 群的分类
*/
public void createTemporaryCluster(String name, String notice, String description, int[] members, int category) {
if(user.isLoggedIn()) {
ClusterCreatePacket packet = new ClusterCreatePacket();
packet.setType(QQ.QQ_CLUSTER_TYPE_TEMPORARY);
packet.setCategory((char)category);
packet.setName(name);
packet.setNotice(notice);
packet.setDescription(description);
packet.setMembers(members);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 创建一个固定群
* @param name 群名称
* @param notice 群声明
* @param description 群描述
* @param members 群成员
* @param authType 群认证类型
* @param category 群的分类
*/
public void createPermanentCluster(String name, String notice, String description, int[] members, int category, byte authType) {
if(user.isLoggedIn()) {
ClusterCreatePacket packet = new ClusterCreatePacket();
packet.setType(QQ.QQ_CLUSTER_TYPE_PERMANENT);
packet.setAuthType(authType);
packet.setCategory((char)category);
packet.setName(name);
packet.setNotice(notice);
packet.setDescription(description);
packet.setMembers(members);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 请求群的信息
* @param clusterId 群内部ID
*/
public void getClusterInfo(int clusterId) {
if(user.isLoggedIn()) {
ClusterGetInfoPacket packet = new ClusterGetInfoPacket();
packet.setClusterId(clusterId);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 得到群的在线成员
* @param clusterId
*/
public void getClusterOnlineMember(int clusterId) {
if(user.isLoggedIn()) {
ClusterGetOnlineMemberPacket packet = new ClusterGetOnlineMemberPacket();
packet.setClusterId(clusterId);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 激活群
* @param clusterId
*/
public void activateCluster(int clusterId) {
if(user.isLoggedIn()) {
ClusterActivatePacket packet = new ClusterActivatePacket();
packet.setClusterId(clusterId);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 得到群中成员的信息
* @param clusterId 群的内部ID
* @param members 成员的QQ号列表,元素类型是Integer
*/
public void getClusterMemberInfo(int clusterId, List members) {
if(user.isLoggedIn()) {
// 由于一次最多只能得到61个成员的信息,所以这里按照30个成员一组进行拆分
// 因为QQ是一次拆这么多
int size = members.size();
int times = (size + 29) / 30;
for(int i = 0; i < times; i++) {
ClusterGetMemberInfoPacket packet = new ClusterGetMemberInfoPacket();
packet.setClusterId(clusterId);
for(int j = 30 * i; j < 30 * i + 30 && j < size; j++)
packet.addMember((Integer)members.get(j));
monitor.putRequest(packet);
port.add(packet);
}
}
}
/**
* 修改临时群信息
* @param clusterId 群内部ID
* @param name 群名称
* @param notice 群声明
* @param description 群简介
* @param members 群成员
* @param category 群分类
*/
public void modifyTemporaryClusterInfo(int clusterId, String name, String notice, String description, int[] members, int category) {
if(user.isLoggedIn()) {
ClusterModifyInfoPacket packet = new ClusterModifyInfoPacket();
packet.setClusterId(clusterId);
packet.setName(name);
packet.setType(QQ.QQ_CLUSTER_TYPE_TEMPORARY);
packet.setNotice(notice);
packet.setDescription(description);
packet.setMembers(members);
packet.setCategory((char)category);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 修改固定群信息
* @param clusterId 群的内部ID
* @param name 群名称
* @param notice 群声明
* @param description 群简介
* @param members 群成员
* @param category 群分类
* @param authType 群认证类型
*/
public void modifyPermanentClusterInfo(int clusterId, String name, String notice, String description, int[] members, int category, byte authType) {
if(user.isLoggedIn()) {
ClusterModifyInfoPacket packet = new ClusterModifyInfoPacket();
packet.setClusterId(clusterId);
packet.setName(name);
packet.setType(QQ.QQ_CLUSTER_TYPE_PERMANENT);
packet.setNotice(notice);
packet.setDescription(description);
packet.setMembers(members);
packet.setCategory((char)category);
packet.setAuthType(authType);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 发送群消息
* @param clusterId 群内部ID
* @param message 消息内容
*/
public void sendClusterMessage(int clusterId, String message) {
if(user.isLoggedIn()) {
ClusterSendIMPacket packet = new ClusterSendIMPacket();
packet.setClusterId(clusterId);
packet.setMessage(message);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 退出一个群
* @param clusterId 群内部ID
*/
public void exitCluster(int clusterId) {
if(user.isLoggedIn()) {
ClusterExitPacket packet = new ClusterExitPacket();
packet.setClusterId(clusterId);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 根据外部ID搜索群
* @param externalId 群的外部ID
*/
public void searchClusterById(int externalId) {
if(user.isLoggedIn()) {
ClusterSearchPacket packet = new ClusterSearchPacket();
packet.setExternalId(externalId);
packet.setSearchType(QQ.QQ_SEARCH_CLUSTER_BY_ID);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 搜索示范群
*/
public void searchDemoCluster() {
if(user.isLoggedIn()) {
ClusterSearchPacket packet = new ClusterSearchPacket();
packet.setSearchType(QQ.QQ_SEARCH_DEMO_CLUSTER);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 加入群
* @param clusterId
*/
public void joinCluster(int clusterId) {
if(user.isLoggedIn()) {
ClusterJoinPacket packet = new ClusterJoinPacket();
packet.setClusterId(clusterId);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 请求加入群
* @param clusterId 群内部ID
* @param message 请求的附加信息
*/
public void requestJoinCluster(int clusterId, String message) {
if(user.isLoggedIn()) {
ClusterAuthPacket packet = new ClusterAuthPacket();
packet.setType(QQ.QQ_CLUSTER_AUTH_REQUEST);
packet.setClusterId(clusterId);
packet.setMessage(message);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 同意加入群
* @param clusterId
*/
public void approveJoinCluster(int clusterId) {
if(user.isLoggedIn()) {
ClusterAuthPacket packet = new ClusterAuthPacket();
packet.setType(QQ.QQ_CLUSTER_AUTH_APPROVE);
packet.setClusterId(clusterId);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 拒绝加入群
* @param clusterId
* @param message
*/
public void rejectJoinCluster(int clusterId, String message) {
if(user.isLoggedIn()) {
ClusterAuthPacket packet = new ClusterAuthPacket();
packet.setType(QQ.QQ_CLUSTER_AUTH_REJECT);
packet.setClusterId(clusterId);
packet.setMessage(message);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 修改用户的个人信息
* @param oldPassword 老密码,如果不修改密码,设成null
* @param newPassword 新密码,如果不修改密码,设成null
* @param contactInfo 其他信息
*/
public void modifyInfo(String oldPassword, String newPassword, ContactInfo contactInfo) {
if(user.isLoggedIn()) {
ModifyInfoPacket packet = new ModifyInfoPacket();
packet.setOldPassword(oldPassword);
packet.setNewPassword(newPassword);
for(int i = 1; i < QQ.QQ_CONTACT_FIELDS; i++) {
if(contactInfo.infos[i].equals("-"))
contactInfo.infos[i] = "";
}
packet.setContactInfo(contactInfo);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 得到一个用户的详细信息
* @param qqNum 想要得到的用户QQ号
*/
public void getUserInfo(int qqNum) {
if(user.isLoggedIn()) {
GetUserInfoPacket packet = new GetUserInfoPacket();
packet.setQQ(qqNum);
port.add(packet);
}
}
/**
* 请求取得好友名单,如果成功,将会触发get friend list success和
* get friend list end事件,用户需要监听这两个事件来得到所有的
* 好友信息
*/
public void getFriendList() {
if(user.isLoggedIn()) {
// 请求取得好友名单
GetFriendListPacket packet = new GetFriendListPacket();
port.add(packet);
}
}
/**
* 请求取得好友名单,position指定了名单开始的偏移,建议初级用户不要使用此API
* @param position
*/
public void getFriendList(char position) {
if(user.isLoggedIn()) {
// 请求取得好友名单
GetFriendListPacket packet = new GetFriendListPacket();
packet.setStartPosition(position);
port.add(packet);
}
}
/**
* 请求取得当前在线好友列表,如果成功,将会触发get online friend success
* 和get online friend end事件,用户需要监听这两个事件来得到所有的在线
* 好友
*/
public void getFriendOnline() {
if(port != null) {
GetFriendOnlinePacket packet = new GetFriendOnlinePacket();
port.add(packet);
}
}
/**
* 使我的状态改变成在线
*/
public void makeMeOnline() {
if(user.isLoggedIn() && port != null) {
user.setStatus(QQ.QQ_FRIEND_STATUS_ONLINE);
ChangeStatusPacket packet = new ChangeStatusPacket();
port.add(packet);
}
}
/**
* 使我的状态改变成离开
*/
public void makeMeAway() {
if(user.isLoggedIn() && port != null) {
user.setStatus(QQ.QQ_FRIEND_STATUS_AWAY);
ChangeStatusPacket packet = new ChangeStatusPacket();
port.add(packet);
}
}
/**
* 使我的状态改变为隐身
*/
public void makeMeHidden() {
if(user.isLoggedIn() && port != null) {
user.setStatus(QQ.QQ_FRIEND_STATUS_HIDDEN);
ChangeStatusPacket packet = new ChangeStatusPacket();
port.add(packet);
}
}
/**
* 请求密钥
* @param request
*/
public void requestKey(byte request) {
if(user.isLoggedIn() && port != null) {
RequestKeyPacket packet = new RequestKeyPacket();
packet.setRequest(request);
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 通用方法,发送一个packet,注意packet必须已经执行过finalizeMessage
* 这个方法用在一些包构造比较复杂的情况下,比如上传分组信息这种包,
* 包中数据的来源是无法知道的也不是用几个参数就能概括的,可能也和实现有关。
* @param packet OutPacket子类
*/
public void sendPacket(OutPacket packet) {
if(user.isLoggedIn() && port != null) {
monitor.putRequest(packet);
port.add(packet);
}
}
/**
* 添加一个QQ事件监听器
* @param listener QQListener
*/
public void addQQListener(QQListener listener) {
if(qqListeners.contains(listener)) return;
if(port != null)
port.addQQListener(listener);
if(pp != null)
pp.addQQListener(listener);
qqListeners.add(listener);
}
/**
* 执行一些退出会话的清楚工作
* @param port
* @param thread
*/
private void clean(KeepAliveThread thread, IPort port) {
CleanRunnable cleanRunnable = new CleanRunnable(thread, port);
new Thread(cleanRunnable).start();
}
/**
* @return 登陆服务器IP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -