internal int ExportData(SWBytes buffer) { _byteBuffer.Reset(); foreach (IFrameSyncData frameSyncData in _frameSyncDatas) { frameSyncData.Export(_byteBuffer); } int dataSize = 0; if (largeDataContainer) { UInt16 size = (UInt16)_byteBuffer.DataLength; buffer.Push(size); dataSize = 2 + size; } else { byte size = (byte)_byteBuffer.DataLength; buffer.Push(size); dataSize += 1 + size; } buffer.PushAll(_byteBuffer); return(dataSize); }
public override int Export(SWBytes buffer) { int size = 0; buffer.Push(_nextDynamicBehaviourIndex); size += 2; UInt16 behaviourCount = (UInt16)_behaviours.Count; buffer.Push(behaviourCount); size += 2; foreach (var pair in _behaviours) { UInt16 id = pair.Key; DynamicFrameSyncBehaviour behaviour = pair.Value; buffer.Push(id); size += 2; buffer.Push(behaviour.prefabID); size += 2; size += behaviour.ExportData(buffer); } return(0); }
//EXPORT INPUT internal void ExportInput(SWBytes data) { data.Push(PlayerID); foreach (FrameSyncInputDataController controller in _inputDataControllers) { controller.Export(_exportBitArray); } _exportBitArray.CopyTo(_exportByteArray, 0); data.Push(_exportByteArray); }
void WaitingForRoomFrame() { if (_firstFrameReceived > 0) { SWConsole.Crit($"WaitingForRoomFrame _firstFrameReceived={_firstFrameReceived}"); InputFrameDelta delta = inputFrameDeltas[_firstFrameReceived]; if (delta != null) { SWConsole.Crit($"WaitingForRoomFrame delta not null Delta.frameNumber = {delta.frameNumber}"); if (delta.frameNumber == _firstFrameReceived) { if (_firstFrameReceived > 1) { _game.gameState = FrameSyncGameState.WaitingForInitialSystemData; SWConsole.Crit($"WaitingForRoomFrame RequestInputFrames end={_firstFrameReceived}"); _io.RequestInputFrames(1, _firstFrameReceived); SWConsole.Crit($"WaitingForRoomFrame game WaitingForInitialSystemData now"); } else { //start from 1st frame _currentInputFrameNumber = 1; //create an empty input frame to start with inputFrames[_currentInputFrameNumber] = new InputFrame(_currentInputFrameNumber); _game.gameState = FrameSyncGameState.Running; SetSaveHandler(0); SWConsole.Crit($"WaitingForRoomFrame game running now"); } ResetTimeStamp(); return; } } } if (CheckInterval(FrameSyncConstant.SERVER_FRAME_INITIALIZATION_INTERVAL)) { SWBytes buffer = new SWBytes(32); buffer.Push(0); //frame number buffer.Push(0); //predict byte length = 0; buffer.Push(length); _io.SendInputFrameDeltas(buffer, 1, _input.Size); } }
public void SendData(string jsonData, byte playerID) { //length UInt16 //senderID byte //command byte //jsonData 2 + jsonData length UInt16 length = (UInt16)(1 + 1 + 2 + jsonData.Length); _outBuffer.Reset(); _outBuffer.Push(length); _outBuffer.Push(playerID); _outBuffer.Push(FrameSyncConstant.DEBUG_SERVER_PLAYER_FRAME); _outBuffer.PushUTF8LongString(jsonData); _tcpConnection.Send(_outBuffer); }
public override int Export(SWBytes buffer) { int size = 0; UInt16 behaviourCount = (UInt16)_behaviours.Count; buffer.Push(behaviourCount); size += 2; foreach (var pair in _behaviours) { UInt16 id = pair.Key; StaticFrameSyncBehaviour behaviour = pair.Value; buffer.Push(id); size += 2; size += behaviour.ExportData(buffer); } return(size); }
void SendLocalInputs() { if (_localInputFrameDeltaNumberToSend == 0) { _localInputFrameDeltaNumberToSend = _currentLocalInputFrameDeltaNumber; } _sendLocalInputDeltaBuffer.Reset(); int end = _localInputFrameDeltaNumberToSend + FrameSyncConstant.LOCAL_INPUT_FRAME_RESEND_COUNT; if (end > _currentLocalInputFrameDeltaNumber) { end = _currentLocalInputFrameDeltaNumber; } int count = 0; for (int i = _localInputFrameDeltaNumberToSend; i <= end; i++) { InputFrameDelta inputFrameDelta = localInputFrameDeltas[i]; _sendLocalInputDeltaBuffer.Push(inputFrameDelta.frameNumber); byte length = (byte)inputFrameDelta.bytes.DataLength; _sendLocalInputDeltaBuffer.Push(length); _sendLocalInputDeltaBuffer.PushAll(inputFrameDelta.bytes); count++; inputFrameDelta.resend = inputFrameDelta.resend - 1; if (inputFrameDelta.resend == 0) { _localInputFrameDeltaNumberToSend++; } } if (count > 0) { _io.SendInputFrameDeltas(_sendLocalInputDeltaBuffer, count, _input.Size); } }
void DoTick() { _frameNumber++; _sealedFrameNumber = _frameNumber - 10; if (_sealedFrameNumber < 1) { _sealedFrameNumber = 1; } if (_receivedInputFrameDeltas.Count > 0) { SWConsole.Crit($"MockIO: DoTick playerFrameCount={_receivedInputFrameDeltas.Count}"); InputFrameDelta delta = _receivedInputFrameDeltas.Peek(); if (true) { delta = _receivedInputFrameDeltas.Dequeue(); //SWConsole.Crit($"MockIO: DoTick playerFrameCount 1 ={_receivedInputFrameDeltas.Count}"); _inputFrameDeltas[_frameNumber] = delta; _data.Reset(); byte length = (byte)delta.bytes.DataLength; _data.Push(length); _data.PushAll(delta.bytes); SWConsole.Crit($"MockIO: DoTick send PLAYER={delta.frameNumber} roomStep={_frameNumber}"); MockHandleInputFrameOperaion operation = new MockHandleInputFrameOperaion(_handler, _pingMilliseconds); operation.inputFrameData = SWBytes.Clone(_data); operation.playerLastInputFrameOnServer = _receivedInputFrameDeltas.Count; operation.predictionFrameNumber = _predictedFrameNumber; operation.correctFrameNumber = _correctFrameNumber; operation.roomStep = _frameNumber; operation.sealedFrameNumber = _sealedFrameNumber; _operationQueue.AddOperation(operation); return; } //else if(delta.predictedServerFrameNumber < _frameNumber) //{ // delta = _receivedInputFrameDeltas.Dequeue(); // delta.version = 1; // _inputFrameDeltas[delta.predictedServerFrameNumber] = delta; // _data.Reset(); // byte length = (byte)delta.bytes.DataLength; // _data.Push(length); // _data.Push(delta.bytes, 0); // SWConsole.Crit($"MockIO: DoTick send PLAYER={delta.frameNumber} roomStep={_frameNumber} prediction={delta.predictedServerFrameNumber}"); // _frameNumber--; // _sealedFrameNumber = _frameNumber - 10; // if (_sealedFrameNumber < 1) // { // _sealedFrameNumber = 1; // } // MockHandleInputFrameOperaion operation = new MockHandleInputFrameOperaion(_handler, _pingMilliseconds); // operation.inputFrameData = SWBytes.Clone(_data); // operation.playerLastInputFrameOnServer = _receivedInputFrameDeltas.Count; // operation.predictionError = _predictionError; // operation.roomStep = delta.predictedServerFrameNumber; // operation.version = delta.version; // operation.sealedFrameNumber = _sealedFrameNumber; // _operationQueue.AddOperation(operation); // return; //} } { _lastPredictedFrameNumber = _frameNumber; InputFrameDelta delta = new InputFrameDelta(); delta.frameNumber = 0; //playerFrameNumber _inputFrameDeltas[_frameNumber] = delta; _data.Reset(); _data.Push((byte)0); //length SWConsole.Crit($"MockIO: DoTick send EMPTY={delta.frameNumber} roomStep={_frameNumber}"); MockHandleInputFrameOperaion operation = new MockHandleInputFrameOperaion(_handler, _pingMilliseconds); operation.inputFrameData = SWBytes.Clone(_data); operation.playerLastInputFrameOnServer = _receivedInputFrameDeltas.Count; operation.predictionFrameNumber = _predictedFrameNumber; operation.correctFrameNumber = _correctFrameNumber; operation.roomStep = _frameNumber; operation.sealedFrameNumber = _sealedFrameNumber; _operationQueue.AddOperation(operation); } }