using HarmonyLib; using Steamworks; using System; using System.Threading; namespace SteamTransportTest; /// /// entry point for testing. /// should probably make this a separate project since it copies over steam api. idc rn /// public static class Program { public static void Main(string[] args) { Console.WriteLine("This is the test mode for the steam transport"); try { // stupid copied init code { if (!Packsize.Test()) { Console.Error.WriteLine("[Steamworks.NET] Packsize Test returned false, the wrong version of Steamworks.NET is being run in this platform."); } if (!DllCheck.Test()) { Console.Error.WriteLine("[Steamworks.NET] DllCheck Test returned false, One or more of the Steamworks binaries seems to be the wrong version."); } // qsbcore Environment.SetEnvironmentVariable("SteamAppId", "480"); Environment.SetEnvironmentVariable("SteamGameId", "480"); var m_bInitialized = SteamAPI.Init(); if (!m_bInitialized) { Console.Error.WriteLine("[Steamworks.NET] SteamAPI_Init() failed. Refer to Valve's documentation or the comment above this line for more information."); return; } SteamClient.SetWarningMessageHook((severity, text) => Console.WriteLine(text)); } switch (Console.ReadKey(true).KeyChar) { case '1': Console.WriteLine("server"); DoServer(); break; case '2': Console.WriteLine("client"); DoClient(); break; } } finally { SteamAPI.Shutdown(); Console.WriteLine("Press any key to exit"); Console.ReadKey(); } } private static void DoServer() { var transport = new SteamTransport.SteamTransport(); transport.Log = Console.WriteLine; transport.UseLocalhost = true; transport.OnServerError = (conn, error, s) => Console.Error.WriteLine($"ERROR {conn} {error} {s}"); var theConn = -1; transport.OnServerConnected = conn => theConn = conn; transport.OnServerDataReceived = (conn, bytes, i) => Console.WriteLine($"RECV {conn} {bytes.Join()} {i}"); transport.ServerStart(); try { var running = true; while (running) { transport.ServerEarlyUpdate(); if (Console.KeyAvailable) { switch (Console.ReadKey(true).KeyChar) { case 'q': running = false; break; case 's': transport.ServerSend(theConn, new ArraySegment(new byte[] { 1, 2, 3, 4, 5 }, 1, 5 - 1)); break; case 'd': transport.ServerDisconnect(theConn); break; } } SteamAPI.RunCallbacks(); transport.ServerLateUpdate(); Thread.Sleep(10); } } finally { transport.ServerDisconnect(theConn); // mirror does this for us transport.ServerStop(); } } private static void DoClient() { var transport = new SteamTransport.SteamTransport(); transport.Log = Console.WriteLine; transport.UseLocalhost = true; transport.OnClientError = (error, s) => Console.Error.WriteLine($"ERROR {error} {s}"); transport.OnClientDataReceived = (bytes, i) => Console.WriteLine($"RECV {bytes.Join()} {i}"); transport.ClientConnect("unused"); try { var running = true; transport.OnClientDisconnected = () => running = false; // mirror normally does this while (running) { transport.ClientEarlyUpdate(); if (Console.KeyAvailable) { switch (Console.ReadKey(true).KeyChar) { case 'q': running = false; break; case 's': transport.ClientSend(new ArraySegment(new byte[] { 1, 2, 3, 4, 5 }, 1, 5 - 1)); break; } } SteamAPI.RunCallbacks(); transport.ClientLateUpdate(); Thread.Sleep(10); } } finally { transport.ClientDisconnect(); } } }