Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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);
        }