From 9252901097ebaa28cbb5bd028dd74251085e3970 Mon Sep 17 00:00:00 2001 From: Tom Weiland Date: Wed, 26 Jan 2022 21:19:17 -0800 Subject: [PATCH] Update Riptide to v1.2.0 --- .../Demos/PlayerHosted/Scripts/LobbyManager.cs | 2 +- .../Demos/PlayerHosted/Scripts/NetworkManager.cs | 8 ++++---- .../Scripts/Player/CameraController.cs | 2 +- .../PlayerHosted/Scripts/Player/ClientPlayer.cs | 3 ++- .../PlayerHosted/Scripts/Player/PlayerInput.cs | 5 +++-- .../PlayerHosted/Scripts/Player/PlayerMovement.cs | 5 +++-- .../PlayerHosted/Scripts/Player/PlayerUIManager.cs | 2 +- .../PlayerHosted/Scripts/Player/ServerPlayer.cs | 7 ++++--- .../Demos/PlayerHosted/Scripts/UIManager.cs | 2 +- .../RiptideSteamTransport/Transport/SteamClient.cs | 7 +++++-- .../RiptideSteamTransport/Transport/SteamCommon.cs | 10 ++++++---- .../Transport/SteamConnection.cs | 2 +- .../RiptideSteamTransport/Transport/SteamServer.cs | 14 +++++++++++--- Packages/packages-lock.json | 2 +- 14 files changed, 44 insertions(+), 27 deletions(-) diff --git a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/LobbyManager.cs b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/LobbyManager.cs index d913acf..4de92df 100644 --- a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/LobbyManager.cs +++ b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/LobbyManager.cs @@ -6,7 +6,7 @@ using Steamworks; using UnityEngine; -namespace RiptideNetworking.Demos.SteamTransport.PlayerHosted +namespace RiptideDemos.SteamTransport.PlayerHosted { public class LobbyManager : MonoBehaviour { diff --git a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/NetworkManager.cs b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/NetworkManager.cs index fcd5b6b..0005486 100644 --- a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/NetworkManager.cs +++ b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/NetworkManager.cs @@ -3,12 +3,13 @@ // Copyright (c) 2021 Tom Weiland // For additional information please see the included LICENSE.md file or view it on GitHub: https://github.com/tom-weiland/RiptideSteamTransport/blob/main/LICENSE.md +using RiptideNetworking; using RiptideNetworking.Transports.SteamTransport; using RiptideNetworking.Utils; using System; using UnityEngine; -namespace RiptideNetworking.Demos.SteamTransport.PlayerHosted +namespace RiptideDemos.SteamTransport.PlayerHosted { public enum ServerToClientId : ushort { @@ -88,8 +89,7 @@ private void FixedUpdate() if (Server.IsRunning) Server.Tick(); - if (Client.IsConnected) - Client.Tick(); + Client.Tick(); } private void OnApplicationQuit() @@ -135,7 +135,7 @@ private void ServerPlayerLeft(object sender, ClientDisconnectedEventArgs e) private void DidConnect(object sender, EventArgs e) { - Message message = Message.Create(MessageSendMode.reliable, (ushort)ClientToServerId.playerName); + Message message = Message.Create(MessageSendMode.reliable, ClientToServerId.playerName); message.Add(Steamworks.SteamFriends.GetPersonaName()); Client.Send(message); } diff --git a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/CameraController.cs b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/CameraController.cs index 5ca8e3b..edfe776 100644 --- a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/CameraController.cs +++ b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/CameraController.cs @@ -5,7 +5,7 @@ using UnityEngine; -namespace RiptideNetworking.Demos.SteamTransport.PlayerHosted +namespace RiptideDemos.SteamTransport.PlayerHosted { public class CameraController : MonoBehaviour { diff --git a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/ClientPlayer.cs b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/ClientPlayer.cs index 7d44f16..b457200 100644 --- a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/ClientPlayer.cs +++ b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/ClientPlayer.cs @@ -3,10 +3,11 @@ // Copyright (c) 2021 Tom Weiland // For additional information please see the included LICENSE.md file or view it on GitHub: https://github.com/tom-weiland/RiptideSteamTransport/blob/main/LICENSE.md +using RiptideNetworking; using System.Collections.Generic; using UnityEngine; -namespace RiptideNetworking.Demos.SteamTransport.PlayerHosted +namespace RiptideDemos.SteamTransport.PlayerHosted { public class ClientPlayer : MonoBehaviour { diff --git a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerInput.cs b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerInput.cs index 0cfc4db..ee91ab4 100644 --- a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerInput.cs +++ b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerInput.cs @@ -3,9 +3,10 @@ // Copyright (c) 2021 Tom Weiland // For additional information please see the included LICENSE.md file or view it on GitHub: https://github.com/tom-weiland/RiptideSteamTransport/blob/main/LICENSE.md +using RiptideNetworking; using UnityEngine; -namespace RiptideNetworking.Demos.SteamTransport.PlayerHosted +namespace RiptideDemos.SteamTransport.PlayerHosted { public class PlayerInput : MonoBehaviour { @@ -48,7 +49,7 @@ private void FixedUpdate() #region Messages private void SendInput() { - Message message = Message.Create(MessageSendMode.unreliable, (ushort)ClientToServerId.playerInput); + Message message = Message.Create(MessageSendMode.unreliable, ClientToServerId.playerInput); message.Add(inputs, false); message.Add(camTransform.forward); NetworkManager.Singleton.Client.Send(message); diff --git a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerMovement.cs b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerMovement.cs index 67eac95..11d2966 100644 --- a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerMovement.cs +++ b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerMovement.cs @@ -3,9 +3,10 @@ // Copyright (c) 2021 Tom Weiland // For additional information please see the included LICENSE.md file or view it on GitHub: https://github.com/tom-weiland/RiptideSteamTransport/blob/main/LICENSE.md +using RiptideNetworking; using UnityEngine; -namespace RiptideNetworking.Demos.SteamTransport.PlayerHosted +namespace RiptideDemos.SteamTransport.PlayerHosted { [RequireComponent(typeof(CharacterController))] public class PlayerMovement : MonoBehaviour @@ -77,7 +78,7 @@ private void Move(Vector2 inputDirection) #region Messages private void SendMovement() { - Message message = Message.Create(MessageSendMode.unreliable, (ushort)ServerToClientId.playerMovement); + Message message = Message.Create(MessageSendMode.unreliable, ServerToClientId.playerMovement); message.Add(player.Id); message.Add(transform.position); message.Add(transform.forward); diff --git a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerUIManager.cs b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerUIManager.cs index b0fac45..aabc13f 100644 --- a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerUIManager.cs +++ b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/PlayerUIManager.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.UI; -namespace RiptideNetworking.Demos.SteamTransport.PlayerHosted +namespace RiptideDemos.SteamTransport.PlayerHosted { internal class PlayerUIManager : MonoBehaviour { diff --git a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/ServerPlayer.cs b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/ServerPlayer.cs index 12163cf..26e52d0 100644 --- a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/ServerPlayer.cs +++ b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/Player/ServerPlayer.cs @@ -3,10 +3,11 @@ // Copyright (c) 2021 Tom Weiland // For additional information please see the included LICENSE.md file or view it on GitHub: https://github.com/tom-weiland/RiptideSteamTransport/blob/main/LICENSE.md +using RiptideNetworking; using System.Collections.Generic; using UnityEngine; -namespace RiptideNetworking.Demos.SteamTransport.PlayerHosted +namespace RiptideDemos.SteamTransport.PlayerHosted { [RequireComponent(typeof(PlayerMovement))] public class ServerPlayer : MonoBehaviour @@ -51,12 +52,12 @@ public static void Spawn(ushort id, string username) /// The client to send the message to. public void SendSpawn(ushort toClient) { - NetworkManager.Singleton.Server.Send(GetSpawnData(Message.Create(MessageSendMode.reliable, (ushort)ServerToClientId.spawnPlayer)), toClient); + NetworkManager.Singleton.Server.Send(GetSpawnData(Message.Create(MessageSendMode.reliable, ServerToClientId.spawnPlayer)), toClient); } /// Sends a player's info to all clients. private void SendSpawn() { - NetworkManager.Singleton.Server.SendToAll(GetSpawnData(Message.Create(MessageSendMode.reliable, (ushort)ServerToClientId.spawnPlayer))); + NetworkManager.Singleton.Server.SendToAll(GetSpawnData(Message.Create(MessageSendMode.reliable, ServerToClientId.spawnPlayer))); } private Message GetSpawnData(Message message) diff --git a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/UIManager.cs b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/UIManager.cs index 3e89437..3a3b136 100644 --- a/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/UIManager.cs +++ b/Assets/RiptideSteamTransport/Demos/PlayerHosted/Scripts/UIManager.cs @@ -6,7 +6,7 @@ using UnityEngine; using UnityEngine.UI; -namespace RiptideNetworking.Demos.SteamTransport.PlayerHosted +namespace RiptideDemos.SteamTransport.PlayerHosted { public class UIManager : MonoBehaviour { diff --git a/Assets/RiptideSteamTransport/Transport/SteamClient.cs b/Assets/RiptideSteamTransport/Transport/SteamClient.cs index b2131a7..e7c3add 100644 --- a/Assets/RiptideSteamTransport/Transport/SteamClient.cs +++ b/Assets/RiptideSteamTransport/Transport/SteamClient.cs @@ -63,8 +63,11 @@ public void ChangeLocalServer(SteamServer newLocalServer) /// /// Expects the host address to consist of a Steam ID (). - public void Connect(string hostAddress) + public void Connect(string hostAddress, Message message) { + if (message != null) + RiptideLogger.Log(LogType.error, $"The Steam transport does not support including custom data in connection attempts! Use the {nameof(Client.Connected)} event to send a message instead."); // TODO: maybe revisit this? + try { #if UNITY_SERVER @@ -283,7 +286,7 @@ private void HandleWelcome(Message message) /// Sends a welcome (received) message. private void SendWelcomeReceived() { - Message message = Message.Create(HeaderType.welcome); + Message message = MessageExtensionsTransports.Create(HeaderType.welcome); message.Add(Id); Send(message); diff --git a/Assets/RiptideSteamTransport/Transport/SteamCommon.cs b/Assets/RiptideSteamTransport/Transport/SteamCommon.cs index ddde2e3..fe6c685 100644 --- a/Assets/RiptideSteamTransport/Transport/SteamCommon.cs +++ b/Assets/RiptideSteamTransport/Transport/SteamCommon.cs @@ -26,7 +26,7 @@ protected SteamCommon(string logName) protected EResult SteamSend(Message message, HSteamNetConnection connection) { - byte[] data = new byte[message.WrittenLength]; // TODO: do something about this allocation? + byte[] data = new byte[message.WrittenLength]; // TODO: is this allocation even necessary? Array.Copy(message.Bytes, data, data.Length); GCHandle pinnedArray = GCHandle.Alloc(data, GCHandleType.Pinned); @@ -44,17 +44,19 @@ protected Message SteamProcessMessage(IntPtr ptrs, out HeaderType messageHeader) { SteamNetworkingMessage_t data = Marshal.PtrToStructure(ptrs); - Message message = Message.Create(); + Message message = MessageExtensionsTransports.CreateRaw(); if (data.m_cbSize > message.Bytes.Length) { RiptideLogger.Log(LogType.warning, LogName, $"Can't fully handle {data.m_cbSize} bytes because it exceeds the maximum of {message.Bytes.Length}, message will contain incomplete data!"); Marshal.Copy(data.m_pData, message.Bytes, 0, message.Bytes.Length); - messageHeader = message.PrepareForUse((ushort)message.Bytes.Length); + messageHeader = (HeaderType)message.Bytes[0]; + message.PrepareForUse(messageHeader, (ushort)message.Bytes.Length); } else { Marshal.Copy(data.m_pData, message.Bytes, 0, data.m_cbSize); - messageHeader = message.PrepareForUse((ushort)data.m_cbSize); + messageHeader = (HeaderType)message.Bytes[0]; + message.PrepareForUse(messageHeader, (ushort)message.Bytes.Length); } SteamNetworkingMessage_t.Release(ptrs); diff --git a/Assets/RiptideSteamTransport/Transport/SteamConnection.cs b/Assets/RiptideSteamTransport/Transport/SteamConnection.cs index d520c8e..0bcb6ce 100644 --- a/Assets/RiptideSteamTransport/Transport/SteamConnection.cs +++ b/Assets/RiptideSteamTransport/Transport/SteamConnection.cs @@ -49,7 +49,7 @@ internal void Disconnect() /// Sends a welcome message. internal void SendWelcome() { - Message message = Message.Create(HeaderType.welcome); + Message message = MessageExtensionsTransports.Create(HeaderType.welcome); message.Add(Id); server.Send(message, this); diff --git a/Assets/RiptideSteamTransport/Transport/SteamServer.cs b/Assets/RiptideSteamTransport/Transport/SteamServer.cs index 65488a3..dbcf6bc 100644 --- a/Assets/RiptideSteamTransport/Transport/SteamServer.cs +++ b/Assets/RiptideSteamTransport/Transport/SteamServer.cs @@ -31,6 +31,7 @@ public class SteamServer : SteamCommon, IServer /// public IConnectionInfo[] Clients => clients.Values.ToArray(); /// + public bool AllowAutoMessageRelay { get; set; } = false; /// Currently connected clients, accessible by their endpoints or numeric ID. private DoubleKeyDictionary clients; @@ -117,7 +118,7 @@ internal void NewClientConnected(CSteamID steamId, HSteamNetConnection connectio ushort id = GetAvailableClientId(); SteamConnection steamConnection = new SteamConnection(this, steamId, id, connection); clients.Add(id, steamId, steamConnection); - OnClientConnected(steamConnection.SteamId, new ServerClientConnectedEventArgs(steamConnection)); + OnClientConnected(steamConnection.SteamId, new ServerClientConnectedEventArgs(steamConnection, null)); } /// @@ -145,6 +146,13 @@ private void HandleMessages() case HeaderType.reliable: OnMessageReceived(new ServerMessageReceivedEventArgs(client.Id, message.GetUShort(), message)); break; + case HeaderType.unreliableAutoRelay: + case HeaderType.reliableAutoRelay: + if (AllowAutoMessageRelay) + SendToAll(message, client.Id, false); + else + OnMessageReceived(new ServerMessageReceivedEventArgs(client.Id, message.GetUShort(), message)); + break; case HeaderType.welcome: client.HandleWelcomeReceived(message); @@ -278,7 +286,7 @@ private void SendClientConnected(CSteamID clientSteamId, ushort id) if (clients.Count <= 1) return; // We don't send this to the newly connected client anyways, so don't even bother creating a message if he is the only one connected - Message message = Message.Create(HeaderType.clientConnected); + Message message = MessageExtensionsTransports.Create(HeaderType.clientConnected); message.Add(id); foreach (SteamConnection client in clients.Values) @@ -294,7 +302,7 @@ private void SendClientConnected(CSteamID clientSteamId, ushort id) /// The numeric ID of the client that disconnected. private void SendClientDisconnected(ushort id) { - Message message = Message.Create(HeaderType.clientDisconnected); + Message message = MessageExtensionsTransports.Create(HeaderType.clientDisconnected); message.Add(id); foreach (SteamConnection client in clients.Values) diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 329e472..d564d9c 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -145,7 +145,7 @@ "depth": 0, "source": "git", "dependencies": {}, - "hash": "efee715b74e5200ab7343747cbc7e7336c6c8174" + "hash": "b063398f96faa068534d3e1ea7591ae9a6f0080d" }, "com.unity.modules.ai": { "version": "1.0.0",