private void UnpackBigBox(MessageBigBox msg) { if (msg.User == null) { return; } var queue = BigMsgList[msg.User.Client]; //判断是否为第一个Box if (msg.Offset == 0) { queue.Clear(); queue.Enqueue(new byte[msg.TotalSize]); } //复制数据 Array.Copy(msg.Data, 0, queue.Peek(), msg.Offset, msg.Data.Length); //判断是否发送完毕 if (msg.Offset + msg.Data.Length == msg.TotalSize) { var data = queue.Dequeue(); var realMsg = Message.SetMessageEntity(msg.InnnerMsgName, data, 0, data.Length); if (realMsg != null) { realMsg.User = msg.User; this.PushMessge(realMsg); } } }
public virtual void SendBigMsg(Message msg) { if (IsConnected == false) { return; } //先得到原始数据 var bigBuff = new byte[SecurityTCP.StandardBuffLen]; int size = msg.GetMessgeEntity(bigBuff, 0, bigBuff.Length); //初始化数据 int limitSendSize = (int)(_sendBuff.Length * 0.69); var box = new MessageBigBox() { InnnerMsgName = "", User = msg.User, UserID = msg.UserID, CallID = 0, TotalSize = size, Offset = 0, }; //分类发送 if (size > limitSendSize) { box.Data = new byte[limitSendSize]; do { Array.Copy(bigBuff, box.Offset, box.Data, 0, limitSendSize); this.SendMsg(box); box.Offset += limitSendSize; size -= limitSendSize; } while (size > limitSendSize); } //最后一包,必须包含名称 box.InnnerMsgName = msg.MsgName; box.Data = new byte[size]; Array.Copy(bigBuff, box.Offset, box.Data, 0, size); this.SendMsg(box); }