示例#1
0
        public void ReadWritePackedUIntWithDeferred()
        {
            using (var compressionModel = new NetworkCompressionModel(Allocator.Persistent))
            {
                var  dataStream = new DataStreamWriter(300 * 4, Allocator.Temp);
                uint base_val   = 2000;
                uint count      = 277;
                var  def        = dataStream;
                dataStream.WriteInt((int)0);
                for (uint i = 0; i < count; ++i)
                {
                    dataStream.WritePackedUInt(base_val + i, compressionModel);
                }

                dataStream.Flush();
                def.WriteInt(1979);
                def = dataStream;
                dataStream.WriteInt((int)0);
                def.WriteInt(1979);
                dataStream.Flush();
                var reader = new DataStreamReader(dataStream.AsNativeArray());
                Assert.AreEqual(1979, reader.ReadInt());
                for (uint i = 0; i < count; ++i)
                {
                    var val = reader.ReadPackedUInt(compressionModel);
                    Assert.AreEqual(base_val + i, val);
                }
                Assert.AreEqual(1979, reader.ReadInt());
            }
        }
示例#2
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);
        }
 public override DataStreamWriter WritePacket(DataStreamWriter writer)
 {
     writer.WriteInt(ID);
     writer.WriteInt(playerID.Value);
     writer.WriteInt(playerCharacterID.Value);
     return(writer);
 }
示例#4
0
        private void OnSceneLoaded(Scene scene, LoadSceneMode loadSceneMode)
        {
            DataStreamWriter writer = _clientDriver.BeginSend(_reliablePipeline, _clientToServerConnection);

            writer.WriteInt(Commands.RequestSpawnMessage);
            writer.WriteInt(1);
            writer.WriteInt(scene.buildIndex);
            _clientDriver.EndSend(writer);
        }
示例#5
0
    public void Serialize(ref DataStreamWriter writer)
    {
        writer.WriteInt((int)(movement.x * 100));
        writer.WriteInt((int)(movement.y * 100));
        writer.WriteInt(jumping ? 1 : 0);

        head.Serialize(ref writer, 10000);
        leftHand.Serialize(ref writer, 1000);
        rightHand.Serialize(ref writer, 1000);
    }
示例#6
0
 public void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteInt(checkTick);
     writer.WriteInt(renderTick);
     writer.WriteInt((int)(moveYaw * 10));
     writer.WriteInt((int)(moveMagnitude * 100));
     writer.WriteUInt((uint)buttons.flags);
     writer.WriteFloat(lookYaw);
     writer.WriteFloat(lookPitch);
 }
示例#7
0
 public void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteShort(skillId);
     writer.WriteShort(skill2Id);
     writer.WriteShort(skill3Id);
     writer.WriteShort(skill4Id);
     writer.WriteInt((int)characterId);
     writer.WriteInt((int)skinId);
     writer.WriteString(userId);
 }
示例#8
0
        private static void SerializeNetAsset(NetAsset netAsset, ref DataStreamWriter streamWriter, bool fullLoad)
        {
            streamWriter.WriteInt(netAsset.NetID);
            DataStreamWriter sizeWriter = streamWriter;

            streamWriter.WriteInt(0);
            int length = streamWriter.Length;

            netAsset.Serialize(ref streamWriter, fullLoad);
            sizeWriter.WriteInt(streamWriter.Length - length);
        }
示例#9
0
        private static void WriteNetObject(NetObject netObject, ref DataStreamWriter streamWriter)
        {
            streamWriter.WriteInt(netObject.ID);
            DataStreamWriter sizeWriter = streamWriter;

            streamWriter.WriteInt(0);
            int length = streamWriter.Length;

            netObject.Serialize(ref streamWriter, false);
            sizeWriter.WriteInt(streamWriter.Length - length);
        }
 public override DataStreamWriter WritePacket(DataStreamWriter writer)
 {
     writer.WriteInt(ID);
     writer.WriteInt(playerID.Value);
     writer.WriteInt(queuedActionIDs.Items.Count);
     for (int i = 0; i < queuedActionIDs.Items.Count; i++)
     {
         writer.WriteInt(queuedActionIDs.Items[i]);
     }
     queuedActionIDs.Items.Clear();
     return(writer);
 }
示例#11
0
 protected override void Serialize(ref DataStreamWriter writer, byte dirtyMask)
 {
     if (IsDirtyAt(dirtyMask, 0))
     {
         writer.WriteInt(_paramBytes.Length);
         writer.WriteBytes(new NativeArray <byte>(_paramBytes, Allocator.Temp));
     }
     if (IsDirtyAt(dirtyMask, 1))
     {
         writer.WriteInt(_currentStateHash);
         writer.WriteFloat(_currentEnterTime);
     }
 }
示例#12
0
        private static void WriteNetObject(NetObject netObject, ref DataStreamWriter streamWriter)
        {
            if (!netObject.IsMine)
            {
                return;
            }
            streamWriter.WriteInt(netObject.ID);
            DataStreamWriter sizeWriter = streamWriter;

            streamWriter.WriteInt(0);
            int length = streamWriter.Length;

            netObject.Serialize(ref streamWriter, false, b => b.HasAuthority);
            sizeWriter.WriteInt(streamWriter.Length - length);
        }
示例#13
0
    public void Serialize(ref DataStreamWriter writer)
    {
        new Message(id, messageType).Serialize(ref writer);

        writer.WriteInt(playerID);
        writer.WriteUShort(value);
    }
示例#14
0
        public void AcceptPlayer(int actorNumber)
        {
            if (State == ServerState.Debug)
            {
                return;
            }
            if (State != ServerState.Started)
            {
                throw new InvalidOperationException("Cannot accept player: Server not running");
            }

            for (var i = 0; i < _connections.Length; i++)
            {
                NetworkConnection connection = _connections[i];
                if (connection.InternalId != actorNumber)
                {
                    continue;
                }
                Debug.Log($"Accepting player of client {actorNumber}");
                var connections = new NativeList <NetworkConnection>(1, Allocator.Temp)
                {
                    connection
                };
                DataStreamWriter writer = _serverDriver.BeginSend(_reliablePipeline, connection);
                writer.WriteInt(Commands.AcceptPlayer);
                _serverDriver.EndSend(writer);
                SendNetAssetUpdate(true, connections);
                connections.Dispose();
                PlayerAccepted?.Invoke(actorNumber);
                return;
            }

            Debug.LogWarning($"Cannot accept player of client {actorNumber}: No connection found");
        }
示例#15
0
        public override void SerializeObject(ref DataStreamWriter writer)
        {
            base.SerializeObject(ref writer);

            writer.WriteInt(PlayerID);
            writer.WriteUInt(PlayerColour);
        }
示例#16
0
        private byte[] SerializeParams()
        {
            var writer = new DataStreamWriter(1000, Allocator.Temp);

            for (var i = 0; i < _animator.parameterCount; i++)
            {
                switch (_animatorControllerParameters[i].type)
                {
                case AnimatorControllerParameterType.Float:
                    writer.WriteFloat(_animator.GetFloat(_animatorControllerParameters[i].nameHash));
                    break;

                case AnimatorControllerParameterType.Int:
                    writer.WriteInt(_animator.GetInteger(_animatorControllerParameters[i].nameHash));
                    break;

                case AnimatorControllerParameterType.Bool:
                case AnimatorControllerParameterType.Trigger:
                    writer.WriteBool(_animator.GetBool(_animatorControllerParameters[i].nameHash));
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(writer.AsNativeArray().ToArray());
        }
示例#17
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()
        }
示例#18
0
    public void Serialize(ref DataStreamWriter writer)
    {
        new Message(id, MessageType.Welcome).Serialize(ref writer);

        writer.WriteInt(playerID);
        writer.WriteUInt(color.ToUInt());
    }
    public override void SerializeObject(ref DataStreamWriter writer)
    {
        base.SerializeObject(ref writer);

        writer.WriteInt(PlayerID);
        writer.WriteUShort(newHP);
    }
 public override DataStreamWriter WritePacket(DataStreamWriter writer)
 {
     writer.WriteInt(ID);
     for (int i = 0; i < P0WorldStateVariables.Items.Count; i++)
     {
         writer.WriteInt(P0WorldStateVariables.Items[i].Value);
     }
     for (int i = 0; i < P1WorldStateVariables.Items.Count; i++)
     {
         writer.WriteInt(P1WorldStateVariables.Items[i].Value);
     }
     for (int i = 0; i < OtherWorldStateVariables.Items.Count; i++)
     {
         writer.WriteInt(OtherWorldStateVariables.Items[i].Value);
     }
     return(writer);
 }
示例#21
0
        public void SerializeRPC(ref DataStreamWriter writer, string methodName, params object[] args)
        {
            int index = _methodNameToIndex[methodName];

            writer.WriteInt(index);
            Type[] argumentTypes = _argumentTypes[index];
            writer.WriteObjects(args, argumentTypes);
        }
示例#22
0
 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);
 }
示例#23
0
 public void Serialize(ref DataStreamWriter writer)
 {
     writer.WriteInt(pilotSettings.Length);
     for (int i = 0; i < pilotSettings.Length; i++)
     {
         writer.WriteFloat(pilotSettings[i]);
     }
 }
示例#24
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]);
     }
 }
示例#25
0
        protected override void SerializeObject(ref DataStreamWriter writer)
        {
            base.SerializeObject(ref writer);

            writer.WriteFloat(Position.x);
            writer.WriteFloat(Position.y);
            writer.WriteFloat(Position.z);

            writer.WriteInt(TierIndex);
        }
示例#26
0
 public static void WriteVector3ListToStream(List <Vector3> vector3s, ref DataStreamWriter writer)
 {
     writer.WriteInt(vector3s.Count);
     foreach (Vector3 vector3 in vector3s)
     {
         writer.WriteFloat(vector3.x);
         writer.WriteFloat(vector3.y);
         writer.WriteFloat(vector3.z);
     }
 }
        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);
        }
示例#28
0
        public void SendRPC(NetAsset netAsset, string methodName, object[] args)
        {
            if (State == ClientState.Debug)
            {
                return;
            }
            if (State != ClientState.Connected)
            {
                throw new InvalidOperationException($"Cannot send rpc {methodName}: not connected");
            }

            DataStreamWriter streamWriter = _clientDriver.BeginSend(_reliablePipeline, _clientToServerConnection);

            streamWriter.WriteInt(Commands.NetAssetRPC);
            streamWriter.WriteFloat(Server.Time);
            streamWriter.WriteInt(netAsset.NetID);
            netAsset.SerializeRPC(ref streamWriter, methodName, args);
            _clientDriver.EndSend(streamWriter);
            DataSent?.Invoke(streamWriter.Length);
        }
示例#29
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);
            }
        }
示例#30
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);
            }
        }