Added SteamRemotePlay

This commit is contained in:
Garry Newman 2020-02-23 18:58:50 +00:00
parent 8b2599be98
commit f495d18ece
8 changed files with 131 additions and 1 deletions

View File

@ -108,6 +108,7 @@
<Compile Include="SteamNetworkingTest.cs" />
<Compile Include="UgcTest.cs" />
<Compile Include="UgcEditor.cs" />
<Compile Include="RemotePlayTest.cs" />
<Compile Include="UserTest.cs" />
<Compile Include="UserStatsTest.cs" />
<Compile Include="UgcQuery.cs" />

View File

@ -101,6 +101,7 @@
<Compile Include="NetworkingSockets.cs" />
<Compile Include="NetworkingSocketsTest.TestConnectionInterface.cs" />
<Compile Include="NetworkingSocketsTest.TestSocketInterface.cs" />
<Compile Include="RemotePlayTest.cs" />
<Compile Include="SteamMatchmakingTest.cs" />
<Compile Include="RemoteStorageTest.cs" />
<Compile Include="InventoryTest.cs" />

View File

@ -0,0 +1,30 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Steamworks
{
[TestClass]
[DeploymentItem( "steam_api64.dll" )]
[DeploymentItem( "steam_api.dll" )]
public class RemotePlayTest
{
[TestMethod]
public void BasicUsability()
{
Console.WriteLine( $"Sessions: {SteamRemotePlay.SessionCount}" );
var session = SteamRemotePlay.GetSession( 4 );
Assert.IsFalse( session.IsValid );
Assert.IsFalse( session.SteamId.IsValid );
}
}
}

View File

@ -1927,7 +1927,7 @@ public enum ParentalFeature : int
//
// ESteamDeviceFormFactor
//
internal enum SteamDeviceFormFactor : int
public enum SteamDeviceFormFactor : int
{
Unknown = 0,
Phone = 1,

View File

@ -55,6 +55,7 @@ public static void Init( uint appid, bool asyncCallbacks = true )
AddInterface<SteamUserStats>();
AddInterface<SteamUtils>();
AddInterface<SteamVideo>();
AddInterface<SteamRemotePlay>();
if ( asyncCallbacks )
{

View File

@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using Steamworks.Data;
namespace Steamworks
{
/// <summary>
/// Functions that provide information about Steam Remote Play sessions, streaming your game content to another computer or to a Steam Link app or hardware.
/// </summary>
public class SteamRemotePlay : SteamClientClass<SteamRemotePlay>
{
internal static ISteamRemotePlay Internal => Interface as ISteamRemotePlay;
internal override void InitializeInterface( bool server )
{
SetInterface( server, new ISteamRemotePlay( server ) );
InstallEvents( server );
}
internal void InstallEvents( bool server )
{
Dispatch.Install<SteamRemotePlaySessionConnected_t>( x => OnSessionConnected?.Invoke( x.SessionID ), server );
Dispatch.Install<SteamRemotePlaySessionDisconnected_t>( x => OnSessionDisconnected?.Invoke( x.SessionID ), server );
}
/// <summary>
/// Called when a session is connected
/// </summary>
public static event Action<RemotePlaySession> OnSessionConnected;
/// <summary>
/// Called when a session becomes disconnected
/// </summary>
public static event Action<RemotePlaySession> OnSessionDisconnected;
/// <summary>
/// Get the number of currently connected Steam Remote Play sessions
/// </summary>
public static int SessionCount => (int) Internal.GetSessionCount();
/// <summary>
/// Get the currently connected Steam Remote Play session ID at the specified index.
/// IsValid will return false if it's out of bounds
/// </summary>
public static RemotePlaySession GetSession( int index ) => (RemotePlaySession) Internal.GetSessionID( index ).Value;
/// <summary>
/// Invite a friend to Remote Play Together
/// This returns false if the invite can't be sent
/// </summary>
public static bool SendInvite( SteamId steamid ) => Internal.BSendRemotePlayTogetherInvite( steamid );
}
}

View File

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
namespace Steamworks.Data
{
/// <summary>
/// Represents a RemotePlaySession from the SteamRemotePlay interface
/// </summary>
public struct RemotePlaySession
{
public uint Id { get; set; }
public override string ToString() => Id.ToString();
public static implicit operator RemotePlaySession( uint value ) => new RemotePlaySession() { Id = value };
public static implicit operator uint( RemotePlaySession value ) => value.Id;
/// <summary>
/// Returns true if this session was valid when created. This will stay true even
/// after disconnection - so be sure to watch SteamRemotePlay.OnSessionDisconnected
/// </summary>
public bool IsValid => Id > 0;
/// <summary>
/// Get the SteamID of the connected user
/// </summary>
public SteamId SteamId => SteamRemotePlay.Internal.GetSessionSteamID( Id );
/// <summary>
/// Get the name of the session client device
/// </summary>
public string ClientName => SteamRemotePlay.Internal.GetSessionClientName( Id );
/// <summary>
/// Get the name of the session client device
/// </summary>
public SteamDeviceFormFactor FormFactor => SteamRemotePlay.Internal.GetSessionClientFormFactor( Id );
}
}

View File

@ -129,6 +129,7 @@ internal static string Expose( string name )
if ( name == "PingLocation" ) return "public";
if ( name == "ConnectionState" ) return "public";
if ( name == "SteamNetworkingAvailability" ) return "public";
if ( name == "SteamDeviceFormFactor" ) return "public";
return "internal";
}