示例#1
0
        /**
         * @doc Room.requestFrame
         * @name 请求补帧
         * @description 调用结果将在 callback 中异步返回。
         * @param {SDKType.RequestFramePara} requestFramePara  请求补帧参数
         * @param {SDKType.ReqCallback<SDKType.RequestFrameRsp>} callback  响应回调函数
         * @returns {void}
         */
        public void RequestFrame(RequestFramePara para, Action <ResponseEvent> callback)
        {
            this.RoomUtil.ActiveFrame();

            void Eve(ResponseEvent eve)
            {
                // Debugger.Log("request frame rsp");
                if (eve.Data != null)
                {
                    var rsp = new RequestFrameRsp();
                    rsp.MergeFrom((ByteString)eve.Data);
                    var frames = new List <Frame> ();
                    foreach (var item in rsp.Frames)
                    {
                        var frame = new Frame {
                            Id       = item.Id,
                            Ext      = item.Ext,
                            Time     = Convert.ToInt64(SdkUtil.GetCurrentTimeSeconds()),
                            RoomId   = RoomInfo.Id,
                            IsReplay = true
                        };
                        frame.Items.AddRange(item.Items);
                        frames.Add(frame);
                    }
                    rsp.Frames.Clear();
                    rsp.Frames.AddRange(frames);
                    eve.Data = rsp;
                }
                callback?.Invoke(eve);
            }

            Sdk.Instance.RequestFrame(para, Eve);
        }
示例#2
0
        private void Fill(int beginFrameId, int endFrameId, com.unity.mgobe.Room room)
        {
            if (!room.IsInRoom())
            {
                return;
            }
            Action <ResponseEvent> callback = (eve) =>
            {
                this._beginFrameId = beginFrameId;
                this._endFrameId   = endFrameId;
                if (eve.Code != ErrCode.EcOk)
                {
                    this._autoReqFrameErrTimes++;
                    if (this._autoReqFrameErrTimes <= 5)
                    {
                        this.Fill(beginFrameId, endFrameId, room);
                    }
                    else
                    {
                        room.OnAutoRequestFrameError?.Invoke(new BroadcastEvent(eve, ""));
                    }
                }
                else
                {
                    this._beginFrameId = -1;
                    this._endFrameId   = -1;

                    this._autoReqFrameErrTimes = 0;
                    var rsp   = (RequestFrameRsp)eve.Data;
                    var cache = new FrameCache(endFrameId);
                    foreach (var item in rsp.Frames)
                    {
                        var frame = new Frame
                        {
                            Id       = item.Id,
                            Ext      = item.Ext,
                            Time     = item.Time,
                            RoomId   = room.RoomInfo.Id,
                            IsReplay = true
                        };
                        frame.Items.AddRange(item.Items);
                        cache.Add(frame);
                    }
                    this._fillCache.Add(beginFrameId, cache);
                    this.FillSend(beginFrameId);
                }
            };
            RequestFramePara frameParam = new RequestFramePara
            {
                BeginFrameId = beginFrameId + 0,
                EndFrameId   = endFrameId + 0,
            };

            room.RequestFrame(frameParam, callback);
        }