(2)咚咚客户端核心设计原理分析 - 代码流程篇 (套接字建立,发送消息流程,接收消息流程)

京麦Tcp建立连接流程:
ConnectTask.run() -> connection.connect()(这里面也注册了一个连接状态的一个回调类) -》 tryToConnectOnTracker (建立连接) ——》 选址(根据TbTracker)然后 -》 realconnect -》socket.connect (真正建立连接)

(initconnect 一些初始化的参数,比如 host port 等)

tryToConnectOnTracker.成功连接到->ap-dd1.jd.com:443  (log 打出说明已经建立成功)

初始化  connection 然后在里面添加  读取类和 写入类的监听 (listener.connectionSuccessful(); 回调成功诶说明建立连接成功)

 

京麦咚咚 - 发送一条消息的流程:sendTxtMessage 

FragmentChatting。sendTxtMessage ->  ChatMessageSendUtils.sendTextMessage (同时添加item到mChattingMsgAdapter,滑动到item的底部位置)-》 ServiceManager.getInstance().sendMessageChat-》
ServiceManager.sendCommand(本质:NotificationService.startService)->NotificationService.performCommand(intent, command)(这个方法其实在start方法里);  -》  NotificationService.doCmdSendPacket -》 NetCoreManager.sendMessage
->NetCoreConnection.sendMessage-》mPacketWriter.sendMessage()    -> 调用套接字输入流进行输出

京麦咚咚 - 接收一条消息的流程:

PackReader.parsePackets()(这里面其实也是一套死循环,去socket读取到缓冲区,然后按照包的开始和终止位置进行makePacket()) - >PackReader.parsePacket()
->AbstractConnection.firePacketReceivedListenersNoFilter-> mPacketListener.processPacket(packet); ->mNetCoreMgr.getCoreModel().processRecvPacket(packet);-> mRecvProcesser.processPacket(packet);(基本上所有的消息都在这里处理)-preprocessPacket()(做一个预处理)intent.putExtra(TcpConstant.SERVICE_BROADCAST_OBJECT1, (Serializable) o1) (发送一个 广播)-》
BaseHelper - onServiceNotifyBroadcast方法中获取收到的消息然后在方法到各个实现了mHelperInterface接口的activity页面去

咚咚读取一条消息的流程:
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值