void TimerFunc(object obj) { lock (_MessageQueue) { UDPFrameData data = new UDPFrameData(); data.FrameNumber = _FrameNumber; Console.WriteLine("====================_MessageQueue.Count=" + _MessageQueue.Count); while (_MessageQueue.Count > 0) { var msg = _MessageQueue.Dequeue(); data.Msgs.Add(ByteString.CopyFrom(msg)); } Facade.Instance._GameServer.Send(data, _UserIds); _FrameNumber++; } }
void OnProcessMsg(UDPFrameData message) { //Debug.LogError("OnProcessMsg(UDPFrameData message) frame number=" + message.FrameNumber); if (_FrameMessages.Count > 0) { int lastFrame = _FrameMessages.ElementAt(_FrameMessages.Count - 1).Value.FrameNumber; //Debug.LogError("lastFrame=" + lastFrame + ", message.FrameNumber=" + message.FrameNumber); if (message.FrameNumber >= lastFrame + 1) //if (message.FrameNumber > lastFrame + 1) //{ // // supply frame // _PartialFrameMessages.Add(message.FrameNumber, message); // // request frame [lastFrame+1, message.FrameNumber-1] //} //else if (message.FrameNumber == lastFrame + 1) { _FrameMessages.Add(message.FrameNumber, message); } // message.FrameNumber <= lastFrame // use the newest message. else { int firstFrame = _FrameMessages.ElementAt(0).Value.FrameNumber; if (message.FrameNumber >= firstFrame) { _FrameMessages[message.FrameNumber] = message; } } } else { if (message.FrameNumber >= CurGameFrame + 1) //if (message.FrameNumber > CurGameFrame + 1) //{ //_PartialFrameMessages.Add(message.FrameNumber, message); //} //else if (message.FrameNumber == CurGameFrame + 1) { _FrameMessages.Add(message.FrameNumber, message); } } }