From d711202dae6eb8f595e4489ef7e4df380f9abb31 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Mon, 24 Feb 2025 15:57:54 -0800 Subject: [PATCH] dont copy on send --- SteamTransport/Client.cs | 7 +++---- SteamTransport/Program.cs | 4 ++-- SteamTransport/Server.cs | 8 ++++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/SteamTransport/Client.cs b/SteamTransport/Client.cs index 139d2ddb..ede8e194 100644 --- a/SteamTransport/Client.cs +++ b/SteamTransport/Client.cs @@ -69,13 +69,12 @@ public class Client public void Send(ArraySegment segment, int channelId) { - var data = new byte[segment.Count]; - Array.Copy(segment.Array, segment.Offset, data, 0, data.Length); + // use pointer to managed array instead of making copy. is this okay? unsafe { - fixed (byte* pData = data) + fixed (byte* pData = segment.Array) { - var result = SteamNetworkingSockets.SendMessageToConnection(_conn, (IntPtr)pData, (uint)data.Length, Util.MirrorChannel2SendFlag(channelId), out _); + var result = SteamNetworkingSockets.SendMessageToConnection(_conn, (IntPtr)(pData + segment.Offset), (uint)segment.Count, Util.MirrorChannel2SendFlag(channelId), out _); _transport.OnClientDataSent?.Invoke(segment, channelId); } } diff --git a/SteamTransport/Program.cs b/SteamTransport/Program.cs index 004f4b5c..9a1aa98a 100644 --- a/SteamTransport/Program.cs +++ b/SteamTransport/Program.cs @@ -92,7 +92,7 @@ public static class Program running = false; break; case 's': - transport.ServerSend(theConn, new ArraySegment(new byte[] { 1, 2, 3 })); + transport.ServerSend(theConn, new ArraySegment(new byte[] { 1, 2, 3, 4, 5 }, 1, 5 - 1)); break; case 'd': transport.ServerDisconnect(theConn); @@ -136,7 +136,7 @@ public static class Program running = false; break; case 's': - transport.ClientSend(new ArraySegment(new byte[] { 1, 2, 3 })); + transport.ClientSend(new ArraySegment(new byte[] { 1, 2, 3, 4, 5 }, 1, 5 - 1)); break; } } diff --git a/SteamTransport/Server.cs b/SteamTransport/Server.cs index 28b50f42..3c756f10 100644 --- a/SteamTransport/Server.cs +++ b/SteamTransport/Server.cs @@ -46,6 +46,7 @@ public class Server public bool IsListening; private HSteamListenSocket _listenSocket; + // connection id is derived from uint to int cast here. is that okay??? private readonly List _conns = new(); public void StartListening() @@ -62,13 +63,12 @@ public class Server { var conn = new HSteamNetConnection((uint)connectionId); - var data = new byte[segment.Count]; - Array.Copy(segment.Array, segment.Offset, data, 0, data.Length); + // use pointer to managed array instead of making copy. is this okay? unsafe { - fixed (byte* pData = data) + fixed (byte* pData = segment.Array) { - var result = SteamNetworkingSockets.SendMessageToConnection(conn, (IntPtr)pData, (uint)data.Length, Util.MirrorChannel2SendFlag(channelId), out _); + var result = SteamNetworkingSockets.SendMessageToConnection(conn, (IntPtr)(pData + segment.Offset), (uint)segment.Count, Util.MirrorChannel2SendFlag(channelId), out _); _transport.OnServerDataSent?.Invoke(connectionId, segment, channelId); } }