@@ -159,6 +159,51 @@ - (void)configNav_Badges
159159#pragma mark - ---------大体思路罗列
160160/*
161161
162+ 以下思路 , 仅表个人意见 , 且是我能想到比较好的处理方法
163+
164+ =====================================================================================
165+ <<< 大致代码结构 >>>
166+
167+ GCDSocket
168+ (提供最原始的写入,读取,超时等方法)
169+ delegate : ChatHandler单例
170+ 怎么去发送消息,接收消息的实际操作者
171+
172+ ||
173+ ⏬
174+ ChatHanlder
175+ (作为中间业务逻辑处理层 , 主要将发送消息,接收消息和各个实际接收的控制器们连接起来,数据缓存,处理等)
176+ delegate : 需要接收消息的所有对象 (注册成为ChatHandler的代理,ChatHandler中数组对各个对象进行存储)
177+ 数据处理(数据库以及沙盒),数据缓存(数据库以及沙盒),消息发送接收业务逻辑处理���际操作者
178+
179+ || || ||
180+ ⏬ ⏬ ⏬
181+ ViewController1 ViewController2 .........
182+
183+ 控制器里需要做的 , 是对内存中消息模型进行操作 , 以此更新UI . 比如进度显示 , 失败红叹号显示 , 转圈 , 消息删除 , 撤回等 ...
184+
185+
186+ 这么设计的好处 :
187+ 1. 分工明确 , 每个控制器得到的消息 , 都是可以直接使用的 , 控制器只需要负责主要和V层进行交互 , 避免了在控制器中处理过多的逻辑
188+ 2. ChatHandler作为全局单例 , 生命周期和整个应用保持一致 . 而控制器 , 会随着用户操作而销毁 , 如果把数据放到控制器里处理 , 很可能会造成数据的丢失
189+
190+ =====================================================================================
191+ <<< 关于缓存结构 >>>
192+
193+ 文本/表情消息 语音消息 图片消息 视频消息 文件消息 撤回消息 提示语消息
194+
195+ || || || || || || ||
196+ ⏬ ⏬ ⏬ ⏬ ⏬ ⏬ ⏬
197+ 数据库存储 数据库存储 数据库存储 数据库存储 数据库存储 数据库存储 数据库存储
198+ || || ||
199+ 沙盒缓存(语音data) 沙盒缓存(图片data) 沙盒缓存(视频)
200+
201+
202+ ===================================================================================
203+
204+
205+
206+
162207 <<<<Socket连接>>>>
163208
164209 登录 -> 连接服务器端口 -> 成功连接 -> SSL验证 -> 发送登录TCP请求(login) -> 收到服务端返回登录成功回执(loginReceipt) ->发送心跳 -> 出现连接中断 ->断网重连3次 -> 退出程序主动断开连接
0 commit comments