/*
* LumaQQ - Java QQ Client
*
* Copyright (C) 2004 luma <stubma@163.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.tsinghua.lumaqq.qq;
import static edu.tsinghua.lumaqq.qq.QQPort.*;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.Callable;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import edu.tsinghua.lumaqq.qq.beans.Card;
import edu.tsinghua.lumaqq.qq.beans.ContactInfo;
import edu.tsinghua.lumaqq.qq.beans.FriendRemark;
import edu.tsinghua.lumaqq.qq.beans.Member;
import edu.tsinghua.lumaqq.qq.beans.QQOrganization;
import edu.tsinghua.lumaqq.qq.beans.QQUser;
import edu.tsinghua.lumaqq.qq.beans.Signature;
import edu.tsinghua.lumaqq.qq.events.IQQListener;
import edu.tsinghua.lumaqq.qq.events.PacketEvent;
import edu.tsinghua.lumaqq.qq.events.QQEvent;
import edu.tsinghua.lumaqq.qq.net.ConnectionPolicyFactory;
import edu.tsinghua.lumaqq.qq.net.IConnection;
import edu.tsinghua.lumaqq.qq.net.IConnectionPolicy;
import edu.tsinghua.lumaqq.qq.net.IConnectionPolicyFactory;
import edu.tsinghua.lumaqq.qq.net.IConnectionPool;
import edu.tsinghua.lumaqq.qq.net.IConnectionPoolFactory;
import edu.tsinghua.lumaqq.qq.packets.ErrorPacket;
import edu.tsinghua.lumaqq.qq.packets.InPacket;
import edu.tsinghua.lumaqq.qq.packets.OutPacket;
import edu.tsinghua.lumaqq.qq.packets.Packet;
import edu.tsinghua.lumaqq.qq.packets.in.ReceiveIMPacket;
import edu.tsinghua.lumaqq.qq.packets.out.AddFriendAuthResponsePacket;
import edu.tsinghua.lumaqq.qq.packets.out.AddFriendExPacket;
import edu.tsinghua.lumaqq.qq.packets.out.AdvancedSearchUserPacket;
import edu.tsinghua.lumaqq.qq.packets.out.AuthorizePacket;
import edu.tsinghua.lumaqq.qq.packets.out.ChangeStatusPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterActivatePacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterActivateTempPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterAuthPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterCommitMemberOrganizationPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterCommitOrganizationPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterCreatePacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterCreateTempPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterDismissPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterExitPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterExitTempPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterGetCardBatchPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterGetCardPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterGetInfoPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterGetMemberInfoPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterGetOnlineMemberPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterGetTempInfoPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterJoinPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterModifyCardPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterModifyInfoPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterModifyMemberPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterModifyTempInfoPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterModifyTempMemberPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterSearchPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterSendIMExPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterSendTempIMPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterSetRolePacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterSubClusterOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterTransferRolePacket;
import edu.tsinghua.lumaqq.qq.packets.out.ClusterUpdateOrganizationPacket;
import edu.tsinghua.lumaqq.qq.packets.out.DeleteFriendPacket;
import edu.tsinghua.lumaqq.qq.packets.out.DownloadGroupFriendPacket;
import edu.tsinghua.lumaqq.qq.packets.out.FriendDataOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out.FriendLevelOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out.GetFriendListPacket;
import edu.tsinghua.lumaqq.qq.packets.out.GetKeyPacket;
import edu.tsinghua.lumaqq.qq.packets.out.GetLoginTokenPacket;
import edu.tsinghua.lumaqq.qq.packets.out.GetOnlineOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out.GetUserInfoPacket;
import edu.tsinghua.lumaqq.qq.packets.out.GroupDataOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out.KeepAlivePacket;
import edu.tsinghua.lumaqq.qq.packets.out.LoginPacket;
import edu.tsinghua.lumaqq.qq.packets.out.LogoutPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ModifyInfoPacket;
import edu.tsinghua.lumaqq.qq.packets.out.PrivacyDataOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out.ReceiveIMReplyPacket;
import edu.tsinghua.lumaqq.qq.packets.out.RemoveSelfPacket;
import edu.tsinghua.lumaqq.qq.packets.out.SearchUserPacket;
import edu.tsinghua.lumaqq.qq.packets.out.SendIMPacket;
import edu.tsinghua.lumaqq.qq.packets.out.SendSMSPacket;
import edu.tsinghua.lumaqq.qq.packets.out.SignatureOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out.TempSessionOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out.UploadGroupFriendPacket;
import edu.tsinghua.lumaqq.qq.packets.out.UserPropertyOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out.WeatherOpPacket;
import edu.tsinghua.lumaqq.qq.packets.out._03.GetCustomHeadDataPacket;
import edu.tsinghua.lumaqq.qq.packets.out._03.GetCustomHeadInfoPacket;
import edu.tsinghua.lumaqq.qq.packets.out._05.RequestAgentPacket;
import edu.tsinghua.lumaqq.qq.packets.out._05.RequestBeginPacket;
import edu.tsinghua.lumaqq.qq.packets.out._05.RequestFacePacket;
import edu.tsinghua.lumaqq.qq.packets.out._05.TransferPacket;
import edu.tsinghua.lumaqq.qq.robot.IRobot;
/**
* QQ的客户端类,这个类为用户提供一个方便的接口,比如发送消息之类的,只需要调用一个
* 方法便可以完成了。
*
* LumaQQ网络层通过NIO实现,每个Client分配一个Selector,每个Selector可以监听多个
* Channel,channel包装在IPort的实现类中,对于一个Client,有一个Main Port,这个
* Main Port定义为连接QQ登陆服务器的那个Port。系统登陆之初之有一个Port即Main Port,
* 根据需要可以开启其他Port
*
* @author luma
*/
public class QQClient implements IQQListener {
/**
* 单线程执行器
*/
protected static final SingleExecutor executor = new SingleExecutor();
/** 包处理器数目 */
protected static final int PROCESSOR_COUNT = 4;
// 登陆的服务器IP
private String loginServer;
// TCP方式登录时的服务器端口,UDP方式时无用处
private int tcpLoginPort;
// 包处理器路由器
private ProcessorRouter router;
// QQ监听器
private LinkedList<IQQListener> qqListeners, qqListenersBackup;
// QQ用户
private QQUser user;
// 当前是否正在登陆
private boolean logging;
// 当前是否在重定向登录
private boolean loginRedirect;
// 网络连接池
private IConnectionPool pool;
// 网络连
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
lumaqq for android demo (255个子文件)
.classpath 238B
package.html 3KB
overview.html 1022B
package.html 708B
package.html 704B
package.html 696B
package.html 674B
QQClient.java 84KB
Util.java 68KB
BasicFamilyProcessor.java 66KB
QQ.java 42KB
QQEvent.java 41KB
DoubleMetaphone.java 39KB
ClusterCommandReplyPacket.java 29KB
ReceiveIMPacket.java 28KB
SendIMPacket.java 19KB
Base64.java 18KB
Crypter.java 18KB
BasicFamilyParser.java 17KB
QuotedPrintableCodec.java 15KB
Metaphone.java 14KB
Packet.java 13KB
Socks5Proxy.java 13KB
QQUser.java 13KB
URLCodec.java 12KB
ContactInfo.java 11KB
BinaryCodec.java 10KB
QCodec.java 10KB
Porter.java 10KB
Soundex.java 10KB
ClusterSendIMExPacket.java 9KB
UDPSocks5Port.java 9KB
TCPSocks5Port.java 9KB
TCPHttpPort.java 9KB
SendSMSPacket.java 9KB
TCPPort.java 9KB
PacketHelper.java 9KB
FriendDataOpPacket.java 8KB
PortGate.java 8KB
TransferPacket.java 8KB
HttpProxy.java 8KB
TempSessionOpPacket.java 7KB
Hex.java 7KB
AbstractProxy.java 7KB
BCodec.java 7KB
SystemNotificationPacket.java 7KB
NormalIM.java 6KB
RefinedSoundex.java 6KB
FontStyle.java 6KB
OutPacket.java 6KB
AdvancedSearchUserPacket.java 6KB
_05FamilyProcessor.java 6KB
AuthorizePacket.java 6KB
RFC1522Codec.java 6KB
UDPPort.java 6KB
LoginReplyPacket.java 6KB
BasicOutPacket.java 6KB
ClusterSendTempIMPacket.java 6KB
FriendDataOpReplyPacket.java 5KB
PacketHistory.java 5KB
BasicInPacket.java 5KB
_05FamilyParser.java 5KB
ClusterInfo.java 5KB
ClusterCreatePacket.java 5KB
_05OutPacket.java 5KB
_05InPacket.java 5KB
_03OutPacket.java 5KB
ClusterModifyInfoPacket.java 5KB
SearchUserPacket.java 5KB
QQPort.java 5KB
ClusterCommandPacket.java 5KB
IConnectionPool.java 5KB
ResendTrigger.java 5KB
GroupDataOpPacket.java 5KB
LoginPacket.java 4KB
DigestUtils.java 4KB
GetLoginTokenPacket.java 4KB
_03InPacket.java 4KB
SoundexUtils.java 4KB
RequestAgentPacket.java 4KB
GetLoginTokenReplyPacket.java 4KB
IConnectionPolicy.java 4KB
ModifyInfoPacket.java 4KB
ClusterIM.java 4KB
AbstractPort.java 4KB
TransferReplyPacket.java 4KB
AuthInfoOpPacket.java 4KB
ClusterCreateTempPacket.java 4KB
SendSMSReplyPacket.java 4KB
ClusterModifyTempMemberPacket.java 4KB
GetOnlineOpPacket.java 4KB
_03FamilyProcessor.java 4KB
GroupDataOpReplyPacket.java 4KB
ConnectionPolicy.java 4KB
RequestBeginPacket.java 4KB
SignatureOpPacket.java 4KB
SMS.java 4KB
AbstractDebugObject.java 4KB
_03FamilyParser.java 4KB
AddFriendAuthResponsePacket.java 4KB
共 255 条
- 1
- 2
- 3
资源评论
- tianice2013-03-03少一个logging包,加上可以编译,未测试在手机上是否可用
- ranfulin9872012-05-02编译的时候,QQport报错呀!
- 一天一夜_醒2011-10-24软件报有木马啊
- frieliu2011-10-13适合于有一定的基础,不适宜新手。
- xiongga2011-11-01我编译不成功啊。缺少一个库文件。
yunfeng007
- 粉丝: 45
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功