diff --git a/Facepunch.Steamworks.Test/Client/Server/ServerTest.cs b/Facepunch.Steamworks.Test/Client/Server/ServerTest.cs index b274abe..f100bf1 100644 --- a/Facepunch.Steamworks.Test/Client/Server/ServerTest.cs +++ b/Facepunch.Steamworks.Test/Client/Server/ServerTest.cs @@ -60,92 +60,126 @@ namespace Facepunch.Steamworks.Test } [TestMethod] - public void AuthCallback() + public void AuthenticateAClient() { using ( var client = new Facepunch.Steamworks.Client( 252490 ) ) + using ( var server = new Facepunch.Steamworks.Server( 252490, new ServerInit( "rust", "Rust" ) ) ) { Assert.IsTrue( client.IsValid ); - var ticket = client.Auth.GetAuthSessionTicket(); - var ticketBinary = ticket.Data; + Assert.IsTrue( server.IsValid ); - using ( var server = new Facepunch.Steamworks.Server( 252490, new ServerInit( "rust", "Rust" ) ) ) + server.LogOnAnonymous(); + + for ( int i = 0; i < 100; i++ ) { - server.LogOnAnonymous(); - - Assert.IsTrue( server.IsValid ); - - var auth = server.Auth; - - var Authed = false; - - server.Auth.OnAuthChange = ( steamid, ownerid, status ) => - { - Authed = status == Auth.AuthStatus.OK; - - Assert.AreEqual( steamid, client.SteamId ); - Assert.AreEqual( steamid, ownerid ); - - Console.WriteLine( "steamid: {0}", steamid ); - Console.WriteLine( "ownerid: {0}", ownerid ); - Console.WriteLine( "status: {0}", status ); - }; - - for ( int i = 0; i < 16; i++ ) - { - System.Threading.Thread.Sleep( 10 ); - GC.Collect(); - server.Update(); - GC.Collect(); - client.Update(); - GC.Collect(); - } - - GC.Collect(); - var startStatus = server.Auth.StartSession( ticketBinary, client.SteamId ); - Assert.IsTrue( startStatus == Auth.StartAuthResult.OK ); - GC.Collect(); - - // - // Server should receive a ServerAuth.Status.OK - // message via the OnAuthChange callback - // - - for ( int i = 0; i< 100; i++ ) - { - GC.Collect(); - System.Threading.Thread.Sleep( 100 ); - GC.Collect(); - server.Update(); - client.Update(); - - if ( Authed ) - break; - } - - Assert.IsTrue( Authed ); - - // - // Client cancels ticket - // - ticket.Cancel(); - - // - // Server should receive a ticket cancelled message - // - - for ( int i = 0; i < 100; i++ ) - { - System.Threading.Thread.Sleep( 100 ); - server.Update(); - client.Update(); - - if ( !Authed ) - break; - } - - Assert.IsTrue( !Authed ); + System.Threading.Thread.Sleep( 16 ); + server.Update(); + client.Update(); + if ( server.SteamId != null ) + break; } + + Assert.IsNotNull( server.SteamId ); + + var ticket = client.Auth.GetAuthSessionTicket(); + var status = server.Auth.StartSession( ticket.Data, client.SteamId ); + + Assert.IsTrue( status == Auth.StartAuthResult.OK ); + + bool isAuthed = false; + + server.Auth.OnAuthChange += ( steamId, ownerId, authStatus ) => { + isAuthed = authStatus == Auth.AuthStatus.OK; + }; + + for ( int i = 0; i < 100; i++ ) + { + System.Threading.Thread.Sleep( 16 ); + server.Update(); + client.Update(); + + if ( isAuthed ) + break; + } + + Assert.IsTrue( isAuthed ); + + ticket.Cancel(); + + for ( int i = 0; i < 100; i++ ) + { + System.Threading.Thread.Sleep( 16 ); + server.Update(); + client.Update(); + + if ( !isAuthed ) + break; + } + + Assert.IsFalse( isAuthed ); + } + } + + [TestMethod] + public void AuthenticateAServer() + { + using ( var client = new Facepunch.Steamworks.Client( 252490 ) ) + using ( var server = new Facepunch.Steamworks.Server( 4000, new ServerInit( "rust", "Rust" ) ) ) + { + Assert.IsTrue( client.IsValid ); + Assert.IsTrue( server.IsValid ); + + server.LogOnAnonymous(); + + for ( int i = 0; i < 100; i++ ) + { + System.Threading.Thread.Sleep( 16 ); + server.Update(); + client.Update(); + + if ( server.SteamId != null ) + break; + } + + Assert.IsNotNull( server.SteamId ); + + var ticket = server.Auth.GetAuthSessionTicket(); + var status = client.Auth.StartSession( ticket.Data, server.SteamId.Value ); + + Assert.IsTrue( status == Auth.StartAuthResult.OK ); + + bool isAuthed = false; + + client.Auth.OnAuthChange += ( steamId, ownerId, authStatus ) => { + isAuthed = authStatus == Auth.AuthStatus.OK; + }; + + for ( int i = 0; i < 100; i++ ) + { + System.Threading.Thread.Sleep( 16 ); + server.Update(); + client.Update(); + + if ( isAuthed ) + break; + } + + Assert.IsTrue( isAuthed ); + + ticket.Cancel(); + + for ( int i = 0; i < 100; i++ ) + { + System.Threading.Thread.Sleep( 16 ); + server.Update(); + client.Update(); + + if ( !isAuthed ) + break; + } + + Assert.IsFalse( isAuthed ); } } } diff --git a/Facepunch.Steamworks/BaseSteamworks.cs b/Facepunch.Steamworks/BaseSteamworks.cs index 443962e..a07d047 100644 --- a/Facepunch.Steamworks/BaseSteamworks.cs +++ b/Facepunch.Steamworks/BaseSteamworks.cs @@ -14,7 +14,7 @@ namespace Facepunch.Steamworks /// /// Current running program's AppId /// - public uint AppId { get; internal set; } + public uint AppId { get; private set; } public Auth Auth { get; internal set; } public Networking Networking { get; internal set; } diff --git a/Facepunch.Steamworks/Client.cs b/Facepunch.Steamworks/Client.cs index c98b6af..95bb04a 100644 --- a/Facepunch.Steamworks/Client.cs +++ b/Facepunch.Steamworks/Client.cs @@ -19,7 +19,7 @@ namespace Facepunch.Steamworks /// /// Current user's SteamId /// - public ulong SteamId { get; private set; } + public ulong SteamId { get; internal set; } /// /// If we're sharing this game, this is the owner of it. @@ -123,7 +123,6 @@ namespace Facepunch.Steamworks // // Cache common, unchanging info // - AppId = appId; Username = native.friends.GetPersonaName(); SteamId = native.user.GetSteamID(); BetaName = native.apps.GetCurrentBetaName(); diff --git a/Facepunch.Steamworks/Server.cs b/Facepunch.Steamworks/Server.cs index f4768da..00020b8 100644 --- a/Facepunch.Steamworks/Server.cs +++ b/Facepunch.Steamworks/Server.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using SteamNative; namespace Facepunch.Steamworks { @@ -15,6 +16,11 @@ namespace Facepunch.Steamworks /// public static Server Instance { get; private set; } + /// + /// Serversd 's SteamId. Only set once logged in with Steam + /// + public ulong? SteamId { get; internal set; } + internal override bool IsGameServer { get { return true; } } public ServerQuery Query { get; internal set; } @@ -78,6 +84,8 @@ namespace Facepunch.Steamworks Query = new ServerQuery( this ); Stats = new ServerStats( this ); + RegisterCallback( OnSteamServersConnected ); + // // Run update, first call does some initialization // @@ -330,6 +338,9 @@ namespace Facepunch.Steamworks native.gameServer.ForceHeartbeat(); } - + private void OnSteamServersConnected( SteamServersConnected_t p ) + { + SteamId = native.gameServer.GetSteamID(); + } } }