예제 #1
0
        public void Push(BroadcastEvent eve, com.unity.mgobe.Room room)
        {
            var bst     = (RecvFrameBst)eve.Data;
            var frameId = Convert.ToInt32(bst.Frame.Id);

            if (frameId == 1)
            {
                this.Reset(0);
            }

            this._timer.Push(frameId, SdkUtil.GetCurrentTimeMilliseconds());

            var frameIdSent = this._frameIdSent;
            var frameIdFill = this._frameIdFill;

            this._frameIdFill = frameId;

            // 不自动补帧就直接发出去
            if (!Config.IsAutoRequestFrame)
            {
                this.Send(eve);
                return;
            }

            if (frameId <= frameIdSent + 1)
            {
                this.Send(eve);
                return;
            }

            this._fillCache.Add(frameId, new FrameCache(frameId));
            this._fillCache[frameId].Add(bst.Frame);

            if (frameId > frameIdFill + 1)
            {
                this.Fill(frameIdFill + 1, frameId - 1, room);
            }
        }
예제 #2
0
        ///////////////////////////////// 广播 //////////////////////////////////
        // 收到帧同步消息
        private void OnRecvFrame(DecodeBstResult bstResult, string seq)
        {
            var bst = new RecvFrameBst();

            bst.MergeFrom(bstResult.Body);
            bst.Frame.RoomId = this.GetFrameRoom().Id;
            var eve = new BroadcastEvent(bst, seq);

            // 用户数据上传
            FrameBst.Trigger();

            EventUpload.PushFrameRateEvent(Convert.ToInt64(FrameBst.deltaTime));

            // 上报时间间隔
            foreach (var frameItem in bst.Frame.Items)
            {
                if (frameItem.PlayerId == RequestHeader.PlayerId)
                {
                    EventUpload.PushSendRecvEvent(SdkUtil.GetCurrentTimeMilliseconds() - Convert.ToInt64(frameItem.Timestamp));
                }
            }
            this._responses.OnRecvFrame(eve);
        }