商业化IM 客户端设计---Message模型
来源:互联网 发布:淘宝高级搜索在哪里 编辑:程序博客网 时间:2024/06/06 15:42
在IM开发中,一个问题是怎么管理传输,包括处理消息发送,消息接受和怎么转发等等,就是上一篇文章提到的IMService扮演的角色。另一个问题就是传输的具体数据是怎么定义的,既包括业务数据(文字,语音,图片,地理位置等),也包括控制数据(音频请求,加群请求,离群请求)。现在通过分析Message实体类来学习一下。
下面一系列的常量定义了Message的type
#define MSG_HEARTBEAT 1 //心跳#define MSG_AUTH 2 //认证#define MSG_AUTH_STATUS 3 //认证状态#define MSG_IM 4#define MSG_ACK 5 //ACK#define MSG_RST 6 #define MSG_GROUP_NOTIFICATION 7 //群消息#define MSG_GROUP_IM 8 //群消息#define MSG_PEER_ACK 9 //ACK#define MSG_INPUTING 10 //输入#define MSG_SUBSCRIBE_ONLINE_STATE 11 //在线状态#define MSG_ONLINE_STATE 12 //在线状态#define MSG_PING 13 //#define MSG_PONG 14 //#define MSG_AUTH_TOKEN 15 //TOKEN#define MSG_LOGIN_POINT 16 //多点登录#define MSG_RT 17#define MSG_ENTER_ROOM 18 //进入聊天室#define MSG_LEAVE_ROOM 19 //离开聊天室#define MSG_ROOM_IM 20 //聊天室消息#define MSG_SYSTEM 21 //系统消息#define MSG_UNREAD_COUNT 22 //未读消息数#define MSG_CUSTOMER_SERVICE 23 //客服服务消息#define MSG_CUSTOMER 24 //客服消息#define MSG_CUSTOMER_SUPPORT 25 //客服支持#define MSG_VOIP_CONTROL 64 //VOIP命令
下面几个常量定义了平台type
#define PLATFORM_IOS 1 #define PLATFORM_ANDROID 2#define PLATFORM_WEB 3
IMMessage类由接受者ID,发送者ID,时间戳,消息本地存储ID,消息内容构成,见下面代码。
@interface IMMessage : NSObject@property(nonatomic, assign)int64_t sender;@property(nonatomic, assign)int64_t receiver;@property(nonatomic, assign)int32_t timestamp;@property(nonatomic, assign)int32_t msgLocalID;@property(nonatomic, copy)NSString *content;@end
CustomerMessage,客服消息类,和通用的IM消息格式差别在,customerID,sellerID,customerAppID,storeID这几个属性需要根据客服消息特定的使用场景来理解。
@interface CustomerMessage : NSObject//本地消息id 不会序列化传到服务器@property(nonatomic, assign)int32_t msgLocalID;本地存储ID@property(nonatomic, assign)int64_t customerAppID;//APPid@property(nonatomic, assign)int64_t customerID;//客服用户ID@property(nonatomic, assign)int64_t storeID;//商铺ID@property(nonatomic, assign)int64_t sellerID;//客服ID@property(nonatomic, assign)int32_t timestamp;@property(nonatomic, copy)NSString *content;@end
RoomMessage 聊天室消息
@interface RoomMessage : NSObject@property(nonatomic, assign)int64_t sender;@property(nonatomic, assign)int64_t receiver;@property(nonatomic, copy)NSString *content;@end
消息输入状态
typedef RoomMessage RTMessage;@interface MessageInputing : NSObject@property(nonatomic, assign)int64_t sender;@property(nonatomic, assign)int64_t receiver;@end
授权结构体
@interface AuthenticationToken : NSObject@property(nonatomic, copy) NSString *token;@property(nonatomic, assign) int8_t platformID;@property(nonatomic, copy) NSString *deviceID;@end
多点登录结构体
@interface LoginPoint : NSObject@property(nonatomic, assign) int32_t upTimestamp;@property(nonatomic, assign) int8_t platformID;@property(nonatomic, copy) NSString *deviceID;@end
@interface VOIPControl : NSObject@property(nonatomic, assign) int64_t sender;@property(nonatomic, assign) int64_t receiver;@property(nonatomic) NSData *content;@end
?
@interface Message : NSObject@property(nonatomic, assign)int cmd;@property(nonatomic, assign)int seq;@property(nonatomic) NSObject *body;-(NSData*)pack;-(BOOL)unpack:(NSData*)data;@end
如果想要在现有的消息类型上支持新的消息类型,比如(实时定位,阅后即焚,(T)一下)。需要在Message基础上做扩展。
完整的代码和DEMO可以到Gobelieve IM查看。
0 0
- 商业化IM 客户端设计---Message模型
- 商业化IM 客户端接口设计分析
- Android 自己的XMPP IM 设计客户端设计
- PC/WM手机的IM客户端设计-----agsXMPP
- PC/WM手机的IM客户端设计-----agsXMPP
- WPF一步步开发XMPP IM客户端2:主窗体设计
- IM 去中心化概念模型与架构设计
- IM 去中心化概念模型与架构设计
- 开源软件的商业化策略模型
- IM客户端一览。
- IM web客户端
- 【Tech-IM】IM类型app开发浅谈(二)---聊天中的消息协议的定义与客户端数据库设计
- ZSChatServer线程设计模型---客户端测试程序
- IM开放平台的客户端接口设计,千牛用了JAR包形式?
- IM服务器端设计
- IM设计思考:试问
- IM设计思考
- Android-IM架构设计
- real-time compressive tracking 所感
- javascript 第一日(基本概念)
- 子集生成(三种办法)
- VC操作word和excel文件,查询与读写[依赖office环境]
- TextView的基本属性
- 商业化IM 客户端设计---Message模型
- 装病的聚聚 codevs 5172
- 小白日记13:kali渗透测试之服务扫描(三)-SMTB扫描、防火墙识别、负载均衡识别、WAF识别
- MySQL存储引擎--MyISAM与InnoDB区别
- C语言和汇编混合编程
- java调用arcgis soe发布的rest服务,中文传值乱码问题
- 盛世中的蝼蚁
- Python生成器
- 【java基础 5】树形结构数据加载的思考