using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; using Steamworks.Data; namespace Steamworks { [TestClass] [DeploymentItem( "steam_api64.dll" )] public class NetworkingSocketsTest { [TestMethod] public async Task CreateRelayServer() { var si = SteamNetworkingSockets.CreateRelaySocket(); Console.WriteLine( $"Created Socket: {si}" ); // Give it a second for something to happen await Task.Delay( 1000 ); si.Close(); } [TestMethod] public async Task CreateNormalServer() { var si = SteamNetworkingSockets.CreateNormalSocket( Data.NetworkAddress.AnyIp( 21893 ) ); Console.WriteLine( $"Created Socket: {si}" ); // Give it a second for something to happen await Task.Delay( 1000 ); si.Close(); } [TestMethod] public async Task RelayEndtoEnd() { var socket = SteamNetworkingSockets.CreateRelaySocket( 7788 ); var server = socket.RunAsync(); await Task.Delay( 1000 ); var connection = SteamNetworkingSockets.ConnectRelay( SteamClient.SteamId, 7788 ); var client = connection.RunAsync(); await Task.WhenAll( server, client ); } private class TestConnectionInterface : ConnectionInterface { public override void OnConnectionChanged( ConnectionInfo data ) { Console.WriteLine( $"[Connection][{Connection}] [{data.State}]" ); base.OnConnectionChanged( data ); } public override void OnConnecting( ConnectionInfo data ) { Console.WriteLine( $" - OnConnecting" ); base.OnConnecting( data ); } /// /// Client is connected. They move from connecting to Connections /// public override void OnConnected( ConnectionInfo data ) { Console.WriteLine( $" - OnConnected" ); base.OnConnected( data ); } /// /// The connection has been closed remotely or disconnected locally. Check data.State for details. /// public override void OnDisconnected( ConnectionInfo data ) { Console.WriteLine( $" - OnDisconnected" ); base.OnDisconnected( data ); } internal async Task RunAsync() { Console.WriteLine( "[Connection] RunAsync" ); while ( !Connected ) await Task.Delay( 10 ); Console.WriteLine( "[Connection] Hey We're Connected!" ); while ( Connected ) { await Task.Delay( 10 ); } } } private class TestSocketInterface : SocketInterface { public bool HasFinished = false; public override void OnConnectionChanged( NetConnection connection, ConnectionInfo data ) { Console.WriteLine( $"[Socket{Socket}][{connection}] [{data.State}]" ); base.OnConnectionChanged( connection, data ); } public override void OnConnecting( NetConnection connection, ConnectionInfo data ) { Console.WriteLine( $" - OnConnecting" ); base.OnConnecting( connection, data ); } /// /// Client is connected. They move from connecting to Connections /// public override void OnConnected( NetConnection connection, ConnectionInfo data ) { Console.WriteLine( $" - OnConnected" ); base.OnConnected( connection, data ); } /// /// The connection has been closed remotely or disconnected locally. Check data.State for details. /// public override void OnDisconnected( NetConnection connection, ConnectionInfo data ) { Console.WriteLine( $" - OnDisconnected" ); base.OnDisconnected( connection, data ); } internal async Task RunAsync() { while ( Connected.Count == 0 ) await Task.Delay( 10 ); await Task.Delay( 1000 ); var singleClient = Connected.First(); singleClient.SendMessage( "Hello Client" ); await Task.Delay( 1000 ); singleClient.Close(); await Task.Delay( 1000 ); Close(); } } } }