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); } }
///////////////////////////////// 广播 ////////////////////////////////// // 收到帧同步消息 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); }