コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
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);
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
    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);
    }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
            }
        }