HTML5技术

急急如律令!火速搭建一个即时通讯系统!(附源码分享——高度可移植!) - CXLian(2)

字号+ 作者:H5之家 来源:博客园 2016-01-26 18:01 我要评论( )

StreamContractHelper : IStreamContractHelper 2 { 消息头长度 MessageHeaderLength 7 { 8 get { return MsgHead.HeadLength; } 9 } 从消息头中解析出消息体长度,从而可以间接取出消息体 ParseMessageBodyLength(

StreamContractHelper : IStreamContractHelper 2 { 消息头长度 MessageHeaderLength 7 { 8 get { return MsgHead.HeadLength; } 9 } 从消息头中解析出消息体长度,从而可以间接取出消息体 ParseMessageBodyLength(byte[] head) 16 { 17 return BitConverter.ToInt32(head,4); 18 } 19 } 20

View Code

          

三·通信协议类

然后我们来定义满足协议的消息基类,其中重点是要定义ToContractStream()方法,使得消息能够序列化成满足协议的二进制流,从而通过网络进行传输。 

1 [Serializable] BaseMsg 3 { msgType; MsgType 7 { 8 get { return msgType; } 9 set { msgType = value; } 10 } 序列化为本次通信协议所规范的二进制消息流 [] ToContractStream() 16 { 17 return MsgHelper.BuildMsg(this.msgType, SerializeHelper.SerializeObject(this)); 18 } 19 }

View Code

然后我们来看看MsgHelper类的具体实现

MsgHelper 2 { 构建消息 [] BuildMsg(int msgType, Byte[] msgBody) 10 { 11 MsgHead msgHead = new MsgHead(msgType, msgBody.Length); [] msg = BufferJointer.Joint(msgHead.ToStream(), msgBody); 14 return msg; 15 } [] BuildMsg(int msgType, string str) 18 { 19 return MsgHelper.BuildMsg(msgType, Encoding.UTF8.GetBytes(str)); 20 } 将二进制数组还原成消息对象 T DeserializeMsg<T>(byte[] msg) 28 { 29 return (T)SerializeHelper.DeserializeBytes(msg, 8, msg.Length - 8); 30 } 31 }

View Code

然后我们再看一个具体的消息类ChatMsg的定义 

1 [Serializable] ChatMsg:BaseMsg 3 { sourceUserID; 发送该消息的用户ID SourceUserID 9 { 10 get { return sourceUserID; } 11 set { sourceUserID = value; } 12 } targetUserID; 该消息所发往的用户ID TargetUserID 18 { 19 get { return targetUserID; } 20 set { targetUserID = value; } 21 } 22 private DateTime timeSent; 该消息的发送时间 DateTime TimeSent 27 { 28 get { return timeSent; } 29 set { timeSent = value; } 30 } msgText; MsgText 36 { 37 get { return msgText; } 38 set { msgText = value; } 39 } 构造一个ChatMsg实例 ChatMsg(string _sourceUserID, string _targetUserID, string _MsgText) 47 { 48 base.MsgType = Core.MsgType.Chatting; 49 this.sourceUserID = _sourceUserID; 50 this.targetUserID = _targetUserID; 51 this.timeSent = DateTime.Now; 52 this.msgText = _MsgText; 53 } 54 }

View Code 

  四·登录的通信过程 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • vue2.0版cnode社区项目搭建及实战开发 - sandisen

    vue2.0版cnode社区项目搭建及实战开发 - sandisen

    2017-04-20 14:00

  • net.sz.framework 框架 轻松搭建服务---让你更专注逻辑功能---初探 - 失足程序员

    net.sz.framework 框架 轻松搭建服务---让你更专注逻辑功能---初探 -

    2017-04-02 10:11

  • Ionic2 开发笔记(1)ionic2 +angular2搭建 - 早上~得~喝粥

    Ionic2 开发笔记(1)ionic2 +angular2搭建 - 早上~得~喝粥

    2017-03-13 16:00

  • React+webpack开发环境的搭建 - 雨和雪

    React+webpack开发环境的搭建 - 雨和雪

    2017-03-11 09:05

网友点评