/// <summary> /// Returns a base64 encoded version of the config /// </summary> /// <returns></returns> public string ToBase64() { NetworkConfig config = this; using (PooledBitStream stream = PooledBitStream.Get()) { using (PooledBitWriter writer = PooledBitWriter.Get(stream)) { writer.WriteUInt16Packed(config.ProtocolVersion); writer.WriteBits((byte)config.Transport, 5); writer.WriteUInt16Packed((ushort)config.Channels.Count); for (int i = 0; i < config.Channels.Count; i++) { writer.WriteString(config.Channels[i].Name); writer.WriteBits((byte)config.Channels[i].Type, 5); } writer.WriteUInt16Packed((ushort)config.RegisteredScenes.Count); for (int i = 0; i < config.RegisteredScenes.Count; i++) { writer.WriteString(config.RegisteredScenes[i]); } writer.WriteUInt16Packed((ushort)config.NetworkedPrefabs.Count); for (int i = 0; i < config.NetworkedPrefabs.Count; i++) { writer.WriteBool(config.NetworkedPrefabs[i].playerPrefab); writer.WriteString(config.NetworkedPrefabs[i].name); } writer.WriteInt32Packed(config.MessageBufferSize); writer.WriteInt32Packed(config.ReceiveTickrate); writer.WriteInt32Packed(config.MaxReceiveEventsPerTickRate); writer.WriteInt32Packed(config.SendTickrate); writer.WriteInt32Packed(config.EventTickrate); writer.WriteInt32Packed(config.MaxConnections); writer.WriteInt32Packed(config.ConnectPort); writer.WriteString(config.ConnectAddress); writer.WriteInt32Packed(config.ClientConnectionBufferTimeout); writer.WriteBool(config.ConnectionApproval); writer.WriteInt32Packed(config.SecondsHistory); writer.WriteBool(config.HandleObjectSpawning); writer.WriteBool(config.EnableEncryption); writer.WriteBool(config.SignKeyExchange); writer.WriteBool(config.EnableSceneSwitching); writer.WriteInt32Packed(config.LoadSceneTimeOut); writer.WriteBool(config.EnableTimeResync); writer.WriteBits((byte)config.RpcHashSize, 3); stream.PadStream(); return(Convert.ToBase64String(stream.ToArray())); } } }
/// <summary> /// Returns a base64 encoded version of the config /// </summary> /// <returns></returns> public string ToBase64() { NetworkConfig config = this; using (PooledBitStream stream = PooledBitStream.Get()) { using (PooledBitWriter writer = PooledBitWriter.Get(stream)) { writer.WriteUInt16Packed(config.ProtocolVersion); writer.WriteUInt16Packed((ushort)config.RegisteredScenes.Count); for (int i = 0; i < config.RegisteredScenes.Count; i++) { writer.WriteString(config.RegisteredScenes[i]); } writer.WriteInt32Packed(config.ServerTargetFramerate); writer.WriteInt32Packed(config.NetworkedTransformTickrate); writer.WriteInt32Packed(config.ClientCommandTickrate); writer.WriteInt32Packed(config.MaxReceiveEventsPerTickRate); writer.WriteInt32Packed(config.LagCompensationTickRate); writer.WriteInt32Packed(config.EventTickrate); writer.WriteInt32Packed(config.ClientConnectionBufferTimeout); writer.WriteBool(config.ConnectionApproval); writer.WriteInt32Packed(config.SecondsHistory); writer.WriteBool(config.EnableEncryption); writer.WriteBool(config.SignKeyExchange); writer.WriteInt32Packed(config.LoadSceneTimeOut); writer.WriteBool(config.EnableTimeResync); writer.WriteBool(config.EnsureNetworkedVarLengthSafety); writer.WriteBits((byte)config.RpcHashSize, 2); writer.WriteBool(ForceSamePrefabs); writer.WriteBool(UsePrefabSync); writer.WriteBool(EnableSceneManagement); writer.WriteBool(RecycleNetworkIds); writer.WriteSinglePacked(NetworkIdRecycleDelay); writer.WriteBool(EnableNetworkedVar); writer.WriteBool(AllowRuntimeSceneChanges); writer.WriteBool(EnableNetworkLogs); stream.PadStream(); return(Convert.ToBase64String(stream.ToArray())); } } }
/// <summary> /// Sets the NetworkConfig data with that from a base64 encoded version /// </summary> /// <param name="base64">The base64 encoded version</param> public void FromBase64(string base64) { NetworkConfig config = this; byte[] binary = Convert.FromBase64String(base64); using (BitStream stream = new BitStream(binary)) { using (PooledBitReader reader = PooledBitReader.Get(stream)) { config.ProtocolVersion = reader.ReadUInt16Packed(); ushort sceneCount = reader.ReadUInt16Packed(); config.RegisteredScenes.Clear(); for (int i = 0; i < sceneCount; i++) { config.RegisteredScenes.Add(reader.ReadString().ToString()); } config.ServerTargetFramerate = reader.ReadInt32Packed(); config.NetworkedTransformTickrate = reader.ReadInt32Packed(); config.ClientCommandTickrate = reader.ReadInt32Packed(); config.MaxReceiveEventsPerTickRate = reader.ReadInt32Packed(); config.LagCompensationTickRate = reader.ReadInt32Packed(); config.EventTickrate = reader.ReadInt32Packed(); config.ClientConnectionBufferTimeout = reader.ReadInt32Packed(); config.ConnectionApproval = reader.ReadBool(); config.SecondsHistory = reader.ReadInt32Packed(); config.EnableEncryption = reader.ReadBool(); config.SignKeyExchange = reader.ReadBool(); config.LoadSceneTimeOut = reader.ReadInt32Packed(); config.EnableTimeResync = reader.ReadBool(); config.EnsureNetworkedVarLengthSafety = reader.ReadBool(); config.RpcHashSize = (HashSize)reader.ReadBits(2); config.ForceSamePrefabs = reader.ReadBool(); config.UsePrefabSync = reader.ReadBool(); config.EnableSceneManagement = reader.ReadBool(); config.RecycleNetworkIds = reader.ReadBool(); config.NetworkIdRecycleDelay = reader.ReadSinglePacked(); config.EnableNetworkedVar = reader.ReadBool(); config.AllowRuntimeSceneChanges = reader.ReadBool(); config.EnableNetworkLogs = reader.ReadBool(); } } }
/// <summary> /// Sets the NetworkConfig data with that from a base64 encoded version /// </summary> /// <param name="base64">The base64 encoded version</param> public void FromBase64(string base64) { NetworkConfig config = this; byte[] binary = Convert.FromBase64String(base64); using (var buffer = new NetworkBuffer(binary)) using (var reader = PooledNetworkReader.Get(buffer)) { config.ProtocolVersion = reader.ReadUInt16Packed(); ushort sceneCount = reader.ReadUInt16Packed(); config.RegisteredScenes.Clear(); for (int i = 0; i < sceneCount; i++) { config.RegisteredScenes.Add(reader.ReadString().ToString()); } config.ReceiveTickrate = reader.ReadInt32Packed(); config.MaxReceiveEventsPerTickRate = reader.ReadInt32Packed(); config.EventTickrate = reader.ReadInt32Packed(); config.ClientConnectionBufferTimeout = reader.ReadInt32Packed(); config.ConnectionApproval = reader.ReadBool(); config.SecondsHistory = reader.ReadInt32Packed(); config.LoadSceneTimeOut = reader.ReadInt32Packed(); config.EnableTimeResync = reader.ReadBool(); config.EnsureNetworkVariableLengthSafety = reader.ReadBool(); config.RpcHashSize = (HashSize)reader.ReadBits(2); config.ForceSamePrefabs = reader.ReadBool(); config.UsePrefabSync = reader.ReadBool(); config.EnableSceneManagement = reader.ReadBool(); config.RecycleNetworkIds = reader.ReadBool(); config.NetworkIdRecycleDelay = reader.ReadSinglePacked(); config.EnableNetworkVariable = reader.ReadBool(); config.AllowRuntimeSceneChanges = reader.ReadBool(); config.EnableNetworkLogs = reader.ReadBool(); } }
/// <summary> /// Returns a base64 encoded version of the config /// </summary> /// <returns></returns> public string ToBase64() { NetworkConfig config = this; using (var buffer = PooledNetworkBuffer.Get()) using (var writer = PooledNetworkWriter.Get(buffer)) { writer.WriteUInt16Packed(config.ProtocolVersion); writer.WriteUInt16Packed((ushort)config.RegisteredScenes.Count); for (int i = 0; i < config.RegisteredScenes.Count; i++) { writer.WriteString(config.RegisteredScenes[i]); } writer.WriteInt32Packed(config.ReceiveTickrate); writer.WriteInt32Packed(config.MaxReceiveEventsPerTickRate); writer.WriteInt32Packed(config.EventTickrate); writer.WriteInt32Packed(config.ClientConnectionBufferTimeout); writer.WriteBool(config.ConnectionApproval); writer.WriteInt32Packed(config.SecondsHistory); writer.WriteInt32Packed(config.LoadSceneTimeOut); writer.WriteBool(config.EnableTimeResync); writer.WriteBool(config.EnsureNetworkVariableLengthSafety); writer.WriteBits((byte)config.RpcHashSize, 2); writer.WriteBool(ForceSamePrefabs); writer.WriteBool(UsePrefabSync); writer.WriteBool(EnableSceneManagement); writer.WriteBool(RecycleNetworkIds); writer.WriteSinglePacked(NetworkIdRecycleDelay); writer.WriteBool(EnableNetworkVariable); writer.WriteBool(AllowRuntimeSceneChanges); writer.WriteBool(EnableNetworkLogs); buffer.PadBuffer(); return(Convert.ToBase64String(buffer.ToArray())); } }
/// <summary> /// Returns a base64 encoded version of the config /// </summary> /// <returns></returns> public string ToBase64() { NetworkConfig config = this; using (PooledBitStream stream = PooledBitStream.Get()) { using (PooledBitWriter writer = PooledBitWriter.Get(stream)) { writer.WriteUInt16Packed(config.ProtocolVersion); writer.WriteUInt16Packed((ushort)config.RegisteredScenes.Count); for (int i = 0; i < config.RegisteredScenes.Count; i++) { writer.WriteString(config.RegisteredScenes[i]); } writer.WriteInt32Packed(config.ReceiveTickrate); writer.WriteInt32Packed(config.MaxReceiveEventsPerTickRate); writer.WriteInt32Packed(config.SendTickrate); writer.WriteInt32Packed(config.EventTickrate); writer.WriteInt32Packed(config.ClientConnectionBufferTimeout); writer.WriteBool(config.ConnectionApproval); writer.WriteInt32Packed(config.SecondsHistory); writer.WriteBool(config.EnableEncryption); writer.WriteBool(config.SignKeyExchange); writer.WriteInt32Packed(config.LoadSceneTimeOut); writer.WriteBool(config.EnableTimeResync); writer.WriteBits((byte)config.RpcHashSize, 3); writer.WriteBool(ForceSamePrefabs); writer.WriteBool(UsePrefabSync); writer.WriteBool(EnableNetworkedVar); stream.PadStream(); return(Convert.ToBase64String(stream.ToArray())); } } }
/// <summary> /// Sets the NetworkConfig data with that from a base64 encoded version /// </summary> /// <param name="base64">The base64 encoded version</param> public void FromBase64(string base64) { NetworkConfig config = this; byte[] binary = Convert.FromBase64String(base64); using (BitStream stream = new BitStream(binary)) { using (PooledBitReader reader = PooledBitReader.Get(stream)) { config.ProtocolVersion = reader.ReadUInt16Packed(); ushort sceneCount = reader.ReadUInt16Packed(); config.RegisteredScenes.Clear(); for (int i = 0; i < sceneCount; i++) { config.RegisteredScenes.Add(reader.ReadString().ToString()); } config.ReceiveTickrate = reader.ReadInt32Packed(); config.MaxReceiveEventsPerTickRate = reader.ReadInt32Packed(); config.SendTickrate = reader.ReadInt32Packed(); config.EventTickrate = reader.ReadInt32Packed(); config.ClientConnectionBufferTimeout = reader.ReadInt32Packed(); config.ConnectionApproval = reader.ReadBool(); config.SecondsHistory = reader.ReadInt32Packed(); config.EnableEncryption = reader.ReadBool(); config.SignKeyExchange = reader.ReadBool(); config.LoadSceneTimeOut = reader.ReadInt32Packed(); config.EnableTimeResync = reader.ReadBool(); config.RpcHashSize = (HashSize)reader.ReadBits(3); config.ForceSamePrefabs = reader.ReadBool(); config.UsePrefabSync = reader.ReadBool(); config.EnableNetworkedVar = reader.ReadBool(); } } }
/// <summary> /// Sets the NetworkConfig data with that from a base64 encoded version /// </summary> /// <param name="base64">The base64 encoded version</param> /// <param name="createDummyObject">Wheter or not to create dummy objects for NetworkedPrefabs</param> public void FromBase64(string base64, bool createDummyObject = false) { NetworkConfig config = this; byte[] binary = Convert.FromBase64String(base64); using (BitStream stream = new BitStream(binary)) { using (PooledBitReader reader = PooledBitReader.Get(stream)) { config.ProtocolVersion = reader.ReadUInt16Packed(); config.Transport = (DefaultTransport)reader.ReadBits(5); ushort channelCount = reader.ReadUInt16Packed(); config.Channels.Clear(); for (int i = 0; i < channelCount; i++) { Channel channel = new Channel() { Name = reader.ReadString().ToString(), Type = (ChannelType)reader.ReadBits(5) }; config.Channels.Add(channel); } ushort sceneCount = reader.ReadUInt16Packed(); config.RegisteredScenes.Clear(); for (int i = 0; i < sceneCount; i++) { config.RegisteredScenes.Add(reader.ReadString().ToString()); } ushort networkedPrefabsCount = reader.ReadUInt16Packed(); config.NetworkedPrefabs.Clear(); GameObject root = createDummyObject ? new GameObject("MLAPI: Dummy prefabs") : null; for (int i = 0; i < networkedPrefabsCount; i++) { bool playerPrefab = reader.ReadBool(); string prefabName = reader.ReadString().ToString(); GameObject dummyPrefab = createDummyObject ? new GameObject("REPLACEME: " + prefabName + "(Dummy prefab)", typeof(NetworkedObject)) : null; if (dummyPrefab != null) { dummyPrefab.GetComponent <NetworkedObject>().NetworkedPrefabName = prefabName; dummyPrefab.transform.SetParent(root.transform); //This is just here to not ruin your hierarchy } NetworkedPrefab networkedPrefab = new NetworkedPrefab() { playerPrefab = playerPrefab, prefab = dummyPrefab }; config.NetworkedPrefabs.Add(networkedPrefab); } config.MessageBufferSize = reader.ReadInt32Packed(); config.ReceiveTickrate = reader.ReadInt32Packed(); config.MaxReceiveEventsPerTickRate = reader.ReadInt32Packed(); config.SendTickrate = reader.ReadInt32Packed(); config.EventTickrate = reader.ReadInt32Packed(); config.MaxConnections = reader.ReadInt32Packed(); config.ConnectPort = reader.ReadInt32Packed(); config.ConnectAddress = reader.ReadString().ToString(); config.ClientConnectionBufferTimeout = reader.ReadInt32Packed(); config.ConnectionApproval = reader.ReadBool(); config.SecondsHistory = reader.ReadInt32Packed(); config.HandleObjectSpawning = reader.ReadBool(); config.EnableEncryption = reader.ReadBool(); config.SignKeyExchange = reader.ReadBool(); config.EnableSceneSwitching = reader.ReadBool(); config.EnableTimeResync = reader.ReadBool(); config.AttributeMessageMode = (AttributeMessageMode)reader.ReadBits(3); } } }