Exemple #1
0
 public void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteByte(keyForwardPressed);
     writer.WriteByte(keyBackwardPressed);
     writer.WriteByte(keyTurnRightPressed);
     writer.WriteByte(keyTurnLeftPressed);
 }
Exemple #2
0
 public void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteByte(left);
     writer.WriteByte(right);
     writer.WriteByte(thrust);
     writer.WriteByte(shoot);
 }
Exemple #3
0
        public void WriteOutOfBounds()
        {
            var dataStream = new DataStreamWriter(9, Allocator.Temp);

            Assert.IsTrue(dataStream.WriteInt(42));
            Assert.AreEqual(4, dataStream.Length);
            Assert.IsTrue(dataStream.WriteInt(42));
            Assert.AreEqual(8, dataStream.Length);
            Assert.IsFalse(dataStream.HasFailedWrites);
            Assert.IsFalse(dataStream.WriteInt(42));
            Assert.AreEqual(8, dataStream.Length);
            Assert.IsTrue(dataStream.HasFailedWrites);

            Assert.IsFalse(dataStream.WriteShort(42));
            Assert.AreEqual(8, dataStream.Length);
            Assert.IsTrue(dataStream.HasFailedWrites);

            Assert.IsTrue(dataStream.WriteByte(42));
            Assert.AreEqual(9, dataStream.Length);
            Assert.IsTrue(dataStream.HasFailedWrites);

            Assert.IsFalse(dataStream.WriteByte(42));
            Assert.AreEqual(9, dataStream.Length);
            Assert.IsTrue(dataStream.HasFailedWrites);
        }
Exemple #4
0
 public void Serialize(ref DataStreamWriter writer, ShipCommandData baseline, NetworkCompressionModel compressionModel)
 {
     writer.WriteByte(left);
     writer.WriteByte(right);
     writer.WriteByte(thrust);
     writer.WriteByte(shoot);
 }
 public void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteFloat(this.horizMove);
     writer.WriteFloat(this.vertMove);
     writer.WriteFloat(this.targetPitch);
     writer.WriteFloat(this.targetYaw);
     writer.WriteByte(this.jump);
     writer.WriteByte(this.interact);
     writer.WriteByte(this.sprint);
 }
Exemple #6
0
 public override void SerializeObject(ref DataStreamWriter writer)
 {
     base.SerializeObject(ref writer);
     writer.WriteByte(MoveDirections);
     writer.WriteUShort(TreasureInRoom);
     writer.WriteByte(ContainsMonster);
     writer.WriteByte(ContainsExit);
     writer.WriteByte(NumberOfOtherPlayers);
     for (int i = 0; i < NumberOfOtherPlayers; i++)
     {
         writer.WriteInt(OtherPlayerIDs[i]);
     }
 }
    public void Serialize(ref DataStreamWriter writer)
    {
        new Message(id, MessageType.RoomInfo).Serialize(ref writer);

        writer.WriteByte((byte)moveDirections);
        writer.WriteUShort(treasureInRoom);
        writer.WriteByte(Convert.ToByte(containsMonster));
        writer.WriteByte(Convert.ToByte(containsExit));
        writer.WriteByte(numberOfOtherPlayers);

        for (int i = 0; i < numberOfOtherPlayers; i++)
        {
            writer.WriteInt(otherPlayerIDs[i]);
        }
    }
    public void WriteMessage(ref DataStreamWriter _writer, MessageBase msg)
    {
        byte[] _bytes = new byte[BYTE_ARRAY_SIZE];


        //PACK THE DATA INTO BYTES
        BinaryFormatter _formatter = new BinaryFormatter();

        byte[] _tempBuffer;
        using (var _stream = new MemoryStream())
        {
            _formatter.Serialize(_stream, msg);
            _tempBuffer = _stream.ToArray();
        }

        //save the data
        for (int i = 0; i < _tempBuffer.Length; i++)
        {
            _bytes[i] = _tempBuffer[i];
        }

        //WRITE IT TO THE DATA STREAM
        for (int i = 0; i < BYTE_ARRAY_SIZE; i++)
        {
            _writer.WriteByte(_bytes[i]);
        }
    }
Exemple #9
0
        /// <summary>
        /// 把输入写入发送buffer中
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="data"></param>
        /// <exception cref="InvalidOperationException"></exception>
        public unsafe void Schedule(DynamicBuffer <OutgoingRpcDataStreamBufferComponent> buffer, TActionRequest data)
        {
            TActionSerializer serializer = default;

            // 1字节:Rpc协议头 2字节:rpcIndex
            DataStreamWriter writer =
                new DataStreamWriter(UnsafeUtility.SizeOf <TActionRequest>() + 1 + 2, Allocator.Temp);

            if (buffer.Length == 0)
            {
                writer.WriteByte((byte)NetworkStreamProtocol.Rpc);
            }
            if (!rpcTypeHashToIndex.TryGetValue(rpcType, out var rpcIndex))
            {
                throw new InvalidOperationException("Could not find RPC index for type");
            }
            writer.WriteUShort((ushort)rpcIndex);
            serializer.Serialize(ref writer, data);

            // 把DataStreamWriter内存数据Copy到Buffer中
            var prevLen = buffer.Length;

            buffer.ResizeUninitialized(buffer.Length + writer.Length);
            byte *ptr = (byte *)buffer.GetUnsafePtr();

            ptr += prevLen;
            UnsafeUtility.MemCpy(ptr, writer.AsNativeArray().GetUnsafeReadOnlyPtr(), writer.Length);
        }
Exemple #10
0
        public static void Send(ClientMessage clientMessageType, ClientBehaviour sender)
        {
            DataStreamWriter writer = sender.m_Driver.BeginSend(sender.m_Connection);

            writer.WriteByte((byte)clientMessageType);
            Debug.LogError("Player_id: " + ClientBehaviour.player_id);

            switch (clientMessageType)
            {
            case ClientMessage.Pong:
            case ClientMessage.PlayerReady:
            default:
                break;

            case ClientMessage.MovementInput:
                WriteVector2(ref writer, sender.MovementInput);
                break;

            //case ClientMessage.ShootInput:
            //    writer.WriteByte(Convert.ToByte(sender.IsShooting));
            //    break;
            case ClientMessage.PlayerID:
                writer.WriteInt(ClientBehaviour.player_id);
                break;
            }
            sender.m_Driver.EndSend(writer);
            //AdditionalData.Dispose()
        }
Exemple #11
0
    public override void Serialize(ref DataStreamWriter writer)
    {
        writer.WriteByte((byte)Code);

        writer.WriteInt(Entity.UID);
        writer.WriteByte((byte)Entity.Type);
        writer.WriteByte((byte)Entity.Dirty);

        if (Entity.Dirty.HasFlag(EntityFlag.position))
        {
            SerializePosition(ref writer);
        }
        if (Entity.Dirty.HasFlag(EntityFlag.visual))
        {
            SerializeVisual(ref writer);
        }
    }
 public void Serialize(ref DataStreamWriter writer, VoxelStencilInput baseline, NetworkCompressionModel compressionModel)
 {
     writer.WriteByte(fillType ? (byte)1 : (byte)0);
     writer.WritePackedFloat(centerX, compressionModel);
     writer.WritePackedFloat(centerY, compressionModel);
     writer.WritePackedFloat(radius, compressionModel);
     writer.WritePackedInt((int)shape, compressionModel);
 }
 public void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteByte(fillType ? (byte)1 : (byte)0);
     writer.WriteFloat(centerX);
     writer.WriteFloat(centerY);
     writer.WriteFloat(radius);
     writer.WriteInt((int)shape);
 }
Exemple #14
0
 public void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteByte(Convert.ToByte(HasTarget));
     if (HasTarget)
     {
         writer.WriteIntNetworkByteOrder(TargetPlayerId);
     }
 }
Exemple #15
0
 public void Serialize(ref DataStreamWriter writer, bool fullLoad)
 {
     if (fullLoad)
     {
         _dirtyMask = 255;
     }
     writer.WriteByte(_dirtyMask);
     Serialize(ref writer, _dirtyMask);
     _dirtyMask = 0;
 }
Exemple #16
0
 public override void SerializeObject(ref DataStreamWriter writer)
 {
     base.SerializeObject(ref writer);
     writer.WriteByte(NumberOfScores);
     for (int i = 0; i < NumberOfScores; i++)
     {
         writer.WriteInt(PlayerID[i]);
         writer.WriteUShort(HighScores[i]);
     }
 }
Exemple #17
0
        public override void SerializeObject(ref DataStreamWriter writer)
        {
            base.SerializeObject(ref writer);

            writer.WriteByte(NumberOfScores);
            foreach (ScoreData scoreData in scoreData)
            {
                writer.WriteInt(scoreData.playerID);
                writer.WriteUShort(scoreData.gold);
            }
        }
Exemple #18
0
        public override void SerializeObject(ref DataStreamWriter writer)
        {
            base.SerializeObject(ref writer);
            writer.WriteByte(NumberOfScores);

            for (int i = 0; i < NumberOfScores; i++)
            {
                writer.WriteInt(PlayerScorePair.ElementAt(i).Key);
                writer.WriteUShort(PlayerScorePair.ElementAt(i).Value);
            }
        }
Exemple #19
0
        public void ReadIntoExistingByteArray()
        {
            var byteArray = new NativeArray <byte>(100, Allocator.Temp);

            DataStreamWriter dataStream;

            dataStream = new DataStreamWriter(3, Allocator.Temp);
            {
                dataStream.WriteByte((byte)'a');
                dataStream.WriteByte((byte)'b');
                dataStream.WriteByte((byte)'c');
                var reader = new DataStreamReader(dataStream.AsNativeArray());
                reader.ReadBytes(byteArray.GetSubArray(0, dataStream.Length));
                reader = new DataStreamReader(dataStream.AsNativeArray());
                for (int i = 0; i < reader.Length; ++i)
                {
                    Assert.AreEqual(byteArray[i], reader.ReadByte());
                }
            }
        }
Exemple #20
0
    public void Serialize(ref DataStreamWriter writer)
    {
        new Message(id, MessageType.EndGame).Serialize(ref writer);

        writer.WriteByte(numberOfScores);

        for (int i = 0; i < numberOfScores; i++)
        {
            writer.WriteInt(highScores[i].Key);
            writer.WriteUShort(highScores[i].Value);
        }
    }
Exemple #21
0
            public void Execute([ReadOnly] ref NetworkStreamConnection connection,
                                [ReadOnly] ref NetworkSnapshotAckComponent ack, [ReadOnly] ref CommandTargetComponent state)
            {
                if (isNullCommandData && state.targetEntity != Entity.Null)
                {
                    return;
                }
                if (!isNullCommandData && !inputFromEntity.Exists(state.targetEntity))
                {
                    return;
                }
                DataStreamWriter writer = driver.BeginSend(unreliablePipeline, connection.Value);

                if (!writer.IsCreated)
                {
                    return;
                }
                writer.WriteByte((byte)NetworkStreamProtocol.Command);
                writer.WriteUInt(ack.LastReceivedSnapshotByLocal);
                writer.WriteUInt(ack.ReceivedSnapshotByLocalMask);
                writer.WriteUInt(localTime);
                uint returnTime = ack.LastReceivedRemoteTime;

                if (returnTime != 0)
                {
                    returnTime -= (localTime - ack.LastReceiveTimestamp);
                }
                writer.WriteUInt(returnTime);
                writer.WriteUInt(interpolationDelay);
                writer.WriteUInt(inputTargetTick);
                if (state.targetEntity != Entity.Null)
                {
                    var          input = inputFromEntity[state.targetEntity];
                    TCommandData baselineInputData;
                    input.GetDataAtTick(inputTargetTick, out baselineInputData);
                    baselineInputData.Serialize(ref writer);
                    for (uint inputIndex = 1; inputIndex < k_InputBufferSendSize; ++inputIndex)
                    {
                        TCommandData inputData;
                        input.GetDataAtTick(inputTargetTick - inputIndex, out inputData);
                        inputData.Serialize(ref writer, baselineInputData, compressionModel);
                    }

                    writer.Flush();
                }
#if UNITY_EDITOR || DEVELOPMENT_BUILD
                netStats[0] = inputTargetTick;
                netStats[1] = (uint)writer.Length;
#endif

                driver.EndSend(writer);
            }
Exemple #22
0
        public unsafe void Schedule(DynamicBuffer <OutgoingRpcDataStreamBufferComponent> buffer,
                                    ComponentDataFromEntity <GhostComponent> ghostFromEntity, TActionRequest data)
        {
            var serializer      = default(TActionSerializer);
            var serializerState = new RpcSerializerState {
                GhostFromEntity = ghostFromEntity
            };
            var msgHeaderLen = dynamicAssemblyList ? 10 : 4;
            int maxSize      = UnsafeUtility.SizeOf <TActionRequest>() + msgHeaderLen + 1;
            int rpcIndex     = 0;

            if (!dynamicAssemblyList && !rpcTypeHashToIndex.TryGetValue(rpcType, out rpcIndex))
            {
                throw new InvalidOperationException("Could not find RPC index for type");
            }
            while (true)
            {
                DataStreamWriter writer = new DataStreamWriter(maxSize, Allocator.Temp);
                int packetHeaderLen     = 0;
                if (buffer.Length == 0)
                {
                    packetHeaderLen = 1;
                    writer.WriteByte((byte)NetworkStreamProtocol.Rpc);
                }
                if (dynamicAssemblyList)
                {
                    writer.WriteULong(rpcType);
                }
                else
                {
                    writer.WriteUShort((ushort)rpcIndex);
                }
                var lenWriter = writer;
                writer.WriteUShort((ushort)0);
                serializer.Serialize(ref writer, serializerState, data);
                if (!writer.HasFailedWrites)
                {
                    if (writer.Length - packetHeaderLen > ushort.MaxValue)
                    {
                        throw new InvalidOperationException("RPC is too large to serialize");
                    }
                    lenWriter.WriteUShort((ushort)(writer.Length - msgHeaderLen - packetHeaderLen));
                    var prevLen = buffer.Length;
                    buffer.ResizeUninitialized(buffer.Length + writer.Length);
                    byte *ptr = (byte *)buffer.GetUnsafePtr();
                    ptr += prevLen;
                    UnsafeUtility.MemCpy(ptr, writer.AsNativeArray().GetUnsafeReadOnlyPtr(), writer.Length);
                    break;
                }
                maxSize *= 2;
            }
        }
        public static unsafe void SendProtocolVersion(DynamicBuffer <OutgoingRpcDataStreamBufferComponent> buffer, NetworkProtocolVersion version)
        {
            bool             dynamicAssemblyList = (version.RpcCollectionVersion == 0);
            int              msgHeaderLen        = dynamicAssemblyList ? 10 : 4;
            DataStreamWriter writer = new DataStreamWriter(UnsafeUtility.SizeOf <NetworkProtocolVersion>() + msgHeaderLen + 1, Allocator.Temp);

#if ENABLE_UNITY_COLLECTIONS_CHECKS
            if (buffer.Length != 0)
            {
                throw new InvalidOperationException("Protocol version must be the very first RPC sent");
            }
#endif
            writer.WriteByte((byte)NetworkStreamProtocol.Rpc);
            if (dynamicAssemblyList)
            {
                writer.WriteULong(0);
            }
            else
            {
                writer.WriteUShort(ushort.MaxValue);
            }
            var lenWriter = writer;
            writer.WriteUShort((ushort)0);
            writer.WriteInt(version.NetCodeVersion);
            writer.WriteInt(version.GameVersion);
            if (dynamicAssemblyList)
            {
                writer.WriteULong(0);
                writer.WriteULong(0);
            }
            else
            {
                writer.WriteULong(version.RpcCollectionVersion);
                writer.WriteULong(version.ComponentCollectionVersion);
            }
            lenWriter.WriteUShort((ushort)(writer.Length - msgHeaderLen - 1));
            var prevLen = buffer.Length;
            buffer.ResizeUninitialized(buffer.Length + writer.Length);
            byte *ptr = (byte *)buffer.GetUnsafePtr();
            ptr += prevLen;
            UnsafeUtility.MemCpy(ptr, writer.AsNativeArray().GetUnsafeReadOnlyPtr(), writer.Length);
        }
Exemple #24
0
        public void ReadingDataFromStreamWithSliceOffset()
        {
            var dataStream = new DataStreamWriter(100, Allocator.Temp);

            dataStream.WriteByte((byte)'a');
            dataStream.WriteByte((byte)'b');
            dataStream.WriteByte((byte)'c');
            dataStream.WriteByte((byte)'d');
            dataStream.WriteByte((byte)'e');
            dataStream.WriteByte((byte)'f');
            var reader = new DataStreamReader(dataStream.AsNativeArray().GetSubArray(3, 3));

            Assert.AreEqual('d', reader.ReadByte());
            Assert.AreEqual('e', reader.ReadByte());
            Assert.AreEqual('f', reader.ReadByte());
        }
Exemple #25
0
 public void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteUIntNetworkByteOrder(PowerupId);
     writer.WriteByte(Convert.ToByte(Enabled));
 }
Exemple #26
0
 public static void WriteNativeString32(this DataStreamWriter writer, NativeString32 str)
 {
     writer.WriteByte(str.buffer.byte0000);
     writer.WriteByte(str.buffer.byte0001);
     writer.WriteByte(str.buffer.byte0002);
     writer.WriteByte(str.buffer.byte0003);
     writer.WriteByte(str.buffer.byte0004);
     writer.WriteByte(str.buffer.byte0005);
     writer.WriteByte(str.buffer.byte0006);
     writer.WriteByte(str.buffer.byte0007);
     writer.WriteByte(str.buffer.byte0008);
     writer.WriteByte(str.buffer.byte0009);
     writer.WriteByte(str.buffer.byte0010);
     writer.WriteByte(str.buffer.byte0011);
     writer.WriteByte(str.buffer.byte0012);
     writer.WriteByte(str.buffer.byte0013);
     writer.WriteByte(str.buffer.byte0014.byte0000);
     writer.WriteByte(str.buffer.byte0014.byte0001);
     writer.WriteByte(str.buffer.byte0014.byte0002);
     writer.WriteByte(str.buffer.byte0014.byte0003);
     writer.WriteByte(str.buffer.byte0014.byte0004);
     writer.WriteByte(str.buffer.byte0014.byte0005);
     writer.WriteByte(str.buffer.byte0014.byte0006);
     writer.WriteByte(str.buffer.byte0014.byte0007);
     writer.WriteByte(str.buffer.byte0014.byte0008);
     writer.WriteByte(str.buffer.byte0014.byte0009);
     writer.WriteByte(str.buffer.byte0014.byte0010);
     writer.WriteByte(str.buffer.byte0014.byte0011);
     writer.WriteByte(str.buffer.byte0014.byte0012);
     writer.WriteByte(str.buffer.byte0014.byte0013);
     writer.WriteByte(str.buffer.byte0014.byte0014);
     writer.WriteByte(str.buffer.byte0014.byte0015);
 }
 public override void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteByte((byte)Code);
     writer.WriteFixedString512(MessageContent);             // fixe byte lenght
 }
 public override void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteByte((byte)Code);
     writer.WriteInt(UID);
 }
Exemple #29
0
    public void Serialize(ref DataStreamWriter writer)
    {
        new Message(id, MessageType.MoveRequest).Serialize(ref writer);

        writer.WriteByte((byte)direction);
    }
 public override void SerializeObject(ref DataStreamWriter writer)
 {
     base.SerializeObject(ref writer);
     writer.WriteByte((byte)MoveDirection);
 }