static void test_sequence_buffer32() { Debug.Log("test_sequence_buffer32"); const int Size = 256; var sequenceBuffer = new Network.SequenceBuffer32 <TestPacketData32>(Size); for (int i = 0; i < Size; ++i) { TestPacketData entry; entry.sequence = 0; Assert.IsTrue(sequenceBuffer.Exists((uint)i) == false); Assert.IsTrue(sequenceBuffer.Available((uint)i) == true); Assert.IsTrue(sequenceBuffer.Find((uint)i) == -1); } for (int i = 0; i <= Size * 4; ++i) { int index = sequenceBuffer.Insert((uint)i); Assert.IsTrue(index != -1); Assert.IsTrue(sequenceBuffer.GetSequence() == i + 1); sequenceBuffer.Entries[index].sequence = (uint)i; } for (int i = 0; i <= Size; ++i) { // note: outside bounds! int index = sequenceBuffer.Insert((uint)i); Assert.IsTrue(index == -1); } uint sequence = Size * 4; for (int i = 0; i < Size; ++i) { int index = sequenceBuffer.Find(sequence); Assert.IsTrue(index >= 0); Assert.IsTrue(index < Size); Assert.IsTrue(sequenceBuffer.Entries[index].sequence == sequence); sequence--; } sequenceBuffer.Reset(); Assert.IsTrue(sequenceBuffer.GetSequence() == 0); for (int i = 0; i < Size; ++i) { Assert.IsTrue(sequenceBuffer.Exists((uint)i) == false); Assert.IsTrue(sequenceBuffer.Available((uint)i) == true); Assert.IsTrue(sequenceBuffer.Find((uint)i) == -1); } }
public bool AddStateUpdatePacket(byte[] packetData, DeltaBuffer receiveDeltaBuffer, ushort resetSequence, out long packetFrameNumber) { Network.PacketHeader packetHeader; ReadStateUpdatePacketHeader(packetData, out packetHeader); packetFrameNumber = packetHeader.frameNumber; int entryIndex = sequenceBuffer.Insert(packetHeader.frameNumber); if (entryIndex < 0) { return(false); } bool result = true; Profiler.BeginSample("ProcessStateUpdatePacket"); JitterBufferEntry entry = sequenceBuffer.Entries[entryIndex]; if (ReadStateUpdatePacket(packetData, out entry.packetHeader, out entry.numAvatarStates, ref entry.avatarStateQuantized, out entry.numStateUpdates, ref entry.cubeIds, ref entry.notChanged, ref entry.hasDelta, ref entry.perfectPrediction, ref entry.hasPredictionDelta, ref entry.baselineSequence, ref entry.cubeState, ref entry.cubeDelta, ref entry.predictionDelta)) { for (int i = 0; i < entry.numAvatarStates; ++i) { AvatarState.Unquantize(ref entry.avatarStateQuantized[i], out entry.avatarState[i]); } DecodePrediction(receiveDeltaBuffer, resetSequence, entry.packetHeader.sequence, entry.numStateUpdates, ref entry.cubeIds, ref entry.perfectPrediction, ref entry.hasPredictionDelta, ref entry.baselineSequence, ref entry.cubeState, ref entry.predictionDelta); DecodeNotChangedAndDeltas(receiveDeltaBuffer, resetSequence, entry.numStateUpdates, ref entry.cubeIds, ref entry.notChanged, ref entry.hasDelta, ref entry.baselineSequence, ref entry.cubeState, ref entry.cubeDelta); } else { sequenceBuffer.Remove(packetHeader.frameNumber); result = false; } Profiler.EndSample(); return(result); }