京麦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页面去
咚咚读取一条消息的流程: