mirror of
https://github.com/Facepunch/Facepunch.Steamworks.git
synced 2024-12-25 06:05:46 +03:00
Friends & Test
This commit is contained in:
parent
0cf2761166
commit
2b39d693ef
41
Facepunch.Steamworks.Test/Client/Friends.cs
Normal file
41
Facepunch.Steamworks.Test/Client/Friends.cs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
|
||||||
|
namespace Facepunch.Steamworks.Test
|
||||||
|
{
|
||||||
|
[TestClass]
|
||||||
|
public class Friends
|
||||||
|
{
|
||||||
|
[TestMethod]
|
||||||
|
public void FriendList()
|
||||||
|
{
|
||||||
|
using ( var client = new Facepunch.Steamworks.Client( 252490 ) )
|
||||||
|
{
|
||||||
|
Assert.IsTrue( client.Valid );
|
||||||
|
|
||||||
|
client.Friends.Refresh();
|
||||||
|
|
||||||
|
Assert.IsNotNull( client.Friends.All );
|
||||||
|
|
||||||
|
foreach ( var friend in client.Friends.All )
|
||||||
|
{
|
||||||
|
Console.WriteLine( "{0}: {1} (Friend:{2}) (Blocked:{3})", friend.Id, friend.Name, friend.IsFriend, friend.IsBlocked );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void FriendListWithoutRefresh()
|
||||||
|
{
|
||||||
|
using ( var client = new Facepunch.Steamworks.Client( 252490 ) )
|
||||||
|
{
|
||||||
|
Assert.IsTrue( client.Valid );
|
||||||
|
|
||||||
|
foreach ( var friend in client.Friends.All )
|
||||||
|
{
|
||||||
|
Console.WriteLine( "{0}: {1} (Friend:{2}) (Blocked:{3})", friend.Id, friend.Name, friend.IsFriend, friend.IsBlocked );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -81,7 +81,9 @@
|
|||||||
</When>
|
</When>
|
||||||
<Otherwise>
|
<Otherwise>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
|
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework">
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Otherwise>
|
</Otherwise>
|
||||||
</Choose>
|
</Choose>
|
||||||
@ -89,6 +91,7 @@
|
|||||||
<Compile Include="Client.cs" />
|
<Compile Include="Client.cs" />
|
||||||
<Compile Include="Networking.cs" />
|
<Compile Include="Networking.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Client\Friends.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Facepunch.Steamworks\Facepunch.Steamworks.csproj">
|
<ProjectReference Include="..\Facepunch.Steamworks\Facepunch.Steamworks.csproj">
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Valve.Steamworks;
|
||||||
|
|
||||||
namespace Facepunch.Steamworks
|
namespace Facepunch.Steamworks
|
||||||
{
|
{
|
||||||
@ -28,25 +29,74 @@ public class SteamFriend
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ulong Id { get; internal set; }
|
public ulong Id { get; internal set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Return true if blocked
|
||||||
|
/// </summary>
|
||||||
|
public bool IsBlocked { get; internal set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Return true if is a friend. Returns false if blocked, request etc.
|
/// Return true if is a friend. Returns false if blocked, request etc.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsFriend { get; internal set; }
|
public bool IsFriend { get; internal set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns true if this friend is playing a game (and we know about it)
|
|
||||||
/// </summary>
|
|
||||||
public bool IsPlaying { get; internal set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// If they're current in a game, what are they playing?
|
|
||||||
/// </summary>
|
|
||||||
public int CurrentAppId;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Their current display name
|
/// Their current display name
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Name;
|
public string Name;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if this friend is online
|
||||||
|
/// </summary>
|
||||||
|
public bool IsOnline { get; internal set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if this friend is online and playing this game
|
||||||
|
/// </summary>
|
||||||
|
public bool IsPlayingThisGame { get { return CurrentAppId == Client.AppId; } }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if this friend is online and playing this game
|
||||||
|
/// </summary>
|
||||||
|
public bool IsPlaying { get { return CurrentAppId != 0; } }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The AppId this guy is playing
|
||||||
|
/// </summary>
|
||||||
|
public ulong CurrentAppId { get; internal set; }
|
||||||
|
|
||||||
|
public uint ServerIp { get; internal set; }
|
||||||
|
public int ServerGamePort { get; internal set; }
|
||||||
|
public int ServerQueryPort { get; internal set; }
|
||||||
|
public ulong ServerLobbyId { get; internal set; }
|
||||||
|
|
||||||
|
internal Client Client { get; set; }
|
||||||
|
|
||||||
|
public void Refresh()
|
||||||
|
{
|
||||||
|
Name = Client.native.friends.GetFriendPersonaName( Id );
|
||||||
|
|
||||||
|
EFriendRelationship relationship = (EFriendRelationship) Client.native.friends.GetFriendRelationship( Id );
|
||||||
|
|
||||||
|
IsBlocked = relationship == EFriendRelationship.k_EFriendRelationshipBlocked;
|
||||||
|
IsFriend = relationship == EFriendRelationship.k_EFriendRelationshipFriend;
|
||||||
|
|
||||||
|
CurrentAppId = 0;
|
||||||
|
ServerIp = 0;
|
||||||
|
ServerGamePort = 0;
|
||||||
|
ServerQueryPort = 0;
|
||||||
|
ServerLobbyId = 0;
|
||||||
|
|
||||||
|
FriendGameInfo_t gameInfo = new FriendGameInfo_t();
|
||||||
|
if ( Client.native.friends.GetFriendGamePlayed( Id, out gameInfo ) && gameInfo.m_gameID > 0 )
|
||||||
|
{
|
||||||
|
CurrentAppId = gameInfo.m_gameID;
|
||||||
|
ServerIp = gameInfo.m_unGameIP;
|
||||||
|
ServerGamePort = gameInfo.m_usGamePort;
|
||||||
|
ServerQueryPort = gameInfo.m_usQueryPort;
|
||||||
|
ServerLobbyId = gameInfo.m_steamIDLobby;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Friends
|
public class Friends
|
||||||
@ -67,6 +117,9 @@ public string GetName( ulong steamid )
|
|||||||
|
|
||||||
private List<SteamFriend> _allFriends;
|
private List<SteamFriend> _allFriends;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns all friends, even blocked, ignored, friend requests etc
|
||||||
|
/// </summary>
|
||||||
public IEnumerable<SteamFriend> All
|
public IEnumerable<SteamFriend> All
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@ -81,12 +134,49 @@ public IEnumerable<SteamFriend> All
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<SteamFriend> AllFriends
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
foreach ( var friend in All )
|
||||||
|
{
|
||||||
|
if ( !friend.IsFriend ) continue;
|
||||||
|
|
||||||
|
yield return friend;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<SteamFriend> AllBlocked
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
foreach ( var friend in All )
|
||||||
|
{
|
||||||
|
if ( !friend.IsBlocked ) continue;
|
||||||
|
|
||||||
|
yield return friend;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Refresh()
|
public void Refresh()
|
||||||
{
|
{
|
||||||
|
if ( _allFriends == null )
|
||||||
|
{
|
||||||
|
_allFriends = new List<SteamFriend>();
|
||||||
|
}
|
||||||
|
|
||||||
_allFriends.Clear();
|
_allFriends.Clear();
|
||||||
|
|
||||||
//client.native.friends.GetFriendCount( 0 );
|
var flags = (int) EFriendFlags.k_EFriendFlagAll;
|
||||||
|
var count = client.native.friends.GetFriendCount( flags );
|
||||||
|
|
||||||
|
for ( int i=0; i<count; i++ )
|
||||||
|
{
|
||||||
|
var steamid = client.native.friends.GetFriendByIndex( i, flags );
|
||||||
|
_allFriends.Add( Get( steamid ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum AvatarSize
|
public enum AvatarSize
|
||||||
@ -139,5 +229,19 @@ public Image GetAvatar( AvatarSize size, ulong steamid )
|
|||||||
Height = (int)height
|
Height = (int)height
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public SteamFriend Get( ulong steamid )
|
||||||
|
{
|
||||||
|
var f = new SteamFriend()
|
||||||
|
{
|
||||||
|
Id = steamid,
|
||||||
|
Client = client
|
||||||
|
};
|
||||||
|
|
||||||
|
f.Refresh();
|
||||||
|
|
||||||
|
return f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8880,8 +8880,8 @@ public struct FriendGameInfo_t
|
|||||||
{
|
{
|
||||||
public ulong m_gameID;
|
public ulong m_gameID;
|
||||||
public uint m_unGameIP;
|
public uint m_unGameIP;
|
||||||
public char m_usGamePort;
|
public short m_usGamePort;
|
||||||
public char m_usQueryPort;
|
public short m_usQueryPort;
|
||||||
public ulong m_steamIDLobby;
|
public ulong m_steamIDLobby;
|
||||||
}
|
}
|
||||||
[StructLayout( LayoutKind.Sequential )]
|
[StructLayout( LayoutKind.Sequential )]
|
||||||
|
Loading…
Reference in New Issue
Block a user