From 99b79bb2d37ffee915bb4098103b8161e1b2ed31 Mon Sep 17 00:00:00 2001 From: Ryan Stecker Date: Thu, 13 Sep 2012 18:36:41 -0500 Subject: [PATCH] Implement friend (un)blocking. Closes #29. --- Resources/SteamLanguage/steammsg.steamd | 15 ++++ .../Base/Generated/SteamLanguageInternal.cs | 72 +++++++++++++++++++ .../Steam3/Handlers/SteamFriends/Callbacks.cs | 22 ++++++ .../Handlers/SteamFriends/SteamFriends.cs | 39 ++++++++++ 4 files changed, 148 insertions(+) diff --git a/Resources/SteamLanguage/steammsg.steamd b/Resources/SteamLanguage/steammsg.steamd index d371a67e..edcb46ca 100644 --- a/Resources/SteamLanguage/steammsg.steamd +++ b/Resources/SteamLanguage/steammsg.steamd @@ -270,3 +270,18 @@ class MsgClientGetNumberOfCurrentPlayersResponse +{ + steamidmarshal ulong mySteamId; + steaidmarshal ulong steamIdFriend; + + byte ignore; +}; + +class MsgClientSetIgnoreFriendResponse +{ + ulong unknown; + + EResult result; +}; \ No newline at end of file diff --git a/SteamKit2/SteamKit2/Base/Generated/SteamLanguageInternal.cs b/SteamKit2/SteamKit2/Base/Generated/SteamLanguageInternal.cs index cc06457b..58abe255 100644 --- a/SteamKit2/SteamKit2/Base/Generated/SteamLanguageInternal.cs +++ b/SteamKit2/SteamKit2/Base/Generated/SteamLanguageInternal.cs @@ -1804,5 +1804,77 @@ namespace SteamKit2.Internal } } + public class MsgClientSetIgnoreFriend : ISteamSerializableMessage + { + public EMsg GetEMsg() { return EMsg.ClientSetIgnoreFriend; } + + // Static size: 8 + private ulong mySteamId; + public SteamID MySteamId { get { return new SteamID( mySteamId ); } set { mySteamId = value.ConvertToUInt64(); } } + // Static size: 8 + public ulong SteamIdFriend { get; set; } + // Static size: 1 + public byte Ignore { get; set; } + + public MsgClientSetIgnoreFriend() + { + mySteamId = 0; + SteamIdFriend = 0; + Ignore = 0; + } + + public void Serialize(Stream stream) + { + BinaryWriter bw = new BinaryWriter( stream ); + + bw.Write( mySteamId ); + bw.Write( SteamIdFriend ); + bw.Write( Ignore ); + + } + + public void Deserialize( Stream stream ) + { + BinaryReader br = new BinaryReader( stream ); + + mySteamId = br.ReadUInt64(); + SteamIdFriend = br.ReadUInt64(); + Ignore = br.ReadByte(); + } + } + + public class MsgClientSetIgnoreFriendResponse : ISteamSerializableMessage + { + public EMsg GetEMsg() { return EMsg.ClientSetIgnoreFriendResponse; } + + // Static size: 8 + public ulong Unknown { get; set; } + // Static size: 4 + public EResult Result { get; set; } + + public MsgClientSetIgnoreFriendResponse() + { + Unknown = 0; + Result = 0; + } + + public void Serialize(Stream stream) + { + BinaryWriter bw = new BinaryWriter( stream ); + + bw.Write( Unknown ); + bw.Write( (int)Result ); + + } + + public void Deserialize( Stream stream ) + { + BinaryReader br = new BinaryReader( stream ); + + Unknown = br.ReadUInt64(); + Result = (EResult)br.ReadInt32(); + } + } + } #pragma warning restore 1591 diff --git a/SteamKit2/SteamKit2/Steam3/Handlers/SteamFriends/Callbacks.cs b/SteamKit2/SteamKit2/Steam3/Handlers/SteamFriends/Callbacks.cs index 17ef5b56..1128cd36 100644 --- a/SteamKit2/SteamKit2/Steam3/Handlers/SteamFriends/Callbacks.cs +++ b/SteamKit2/SteamKit2/Steam3/Handlers/SteamFriends/Callbacks.cs @@ -590,5 +590,27 @@ namespace SteamKit2 this.GameID = invite.game_id; } } + + /// + /// This callback is fired in response to an attempt at ignoring a friend. + /// + public sealed class IgnoreFriendCallback : CallbackMsg + { + /// + /// Gets the result of ignoring a friend. + /// + public EResult Result { get; private set; } + + +#if STATIC_CALLBACKS + internal IgnoreFriendCallback( SteamClient client, MsgClientSetIgnoreFriendResponse response ) + : base( client ) +#else + internal IgnoreFriendCallback( MsgClientSetIgnoreFriendResponse response ) +#endif + { + this.Result = response.Result; + } + } } } diff --git a/SteamKit2/SteamKit2/Steam3/Handlers/SteamFriends/SteamFriends.cs b/SteamKit2/SteamKit2/Steam3/Handlers/SteamFriends/SteamFriends.cs index f6cbf432..3295f3b5 100644 --- a/SteamKit2/SteamKit2/Steam3/Handlers/SteamFriends/SteamFriends.cs +++ b/SteamKit2/SteamKit2/Steam3/Handlers/SteamFriends/SteamFriends.cs @@ -432,6 +432,27 @@ namespace SteamKit2 RequestFriendInfo( new SteamID[] { steamId }, requestedInfo ); } + /// + /// Ignores or unignores a friend on Steam. + /// Results are returned in a . + /// + /// The SteamID of the friend to ignore or unignore. + /// if set to true, the friend will be ignored; otherwise, they will be unignored. + /// The Job ID of the request. This can be used to find the appropriate . + public JobID IgnoreFriend( SteamID steamId, bool setIgnore = true ) + { + var ignore = new ClientMsg(); + ignore.SourceJobID = Client.GetNextJobID(); + + ignore.Body.MySteamId = Client.SteamID; + ignore.Body.Ignore = ( byte )( setIgnore ? 1 : 0 ); + ignore.Body.SteamIdFriend = steamId; + + this.Client.Send( ignore ); + + return ignore.SourceJobID; + } + /// /// Handles a client message. This should not be called directly. @@ -480,6 +501,10 @@ namespace SteamKit2 case EMsg.ClientChatInvite: HandleChatInvite( packetMsg ); break; + + case EMsg.ClientSetIgnoreFriendResponse: + HandleIgnoreFriendResponse( packetMsg ); + break; } } @@ -731,6 +756,20 @@ namespace SteamKit2 #else var callback = new ChatInviteCallback( chatInvite.Body ); this.Client.PostCallback( callback ); +#endif + } + void HandleIgnoreFriendResponse( IPacketMsg packetMsg ) + { + var response = new ClientMsg( packetMsg ); + +#if STATIC_CALLBACKS + var innerCallback = new IgnoreFriendCallback( Client, response.Body ); + var callback = new SteamClient.JobCallback( Client, response.TargetJobID, innerCallback ); + SteamClient.PostCallback( callback ); +#else + var innerCallback = new IgnoreFriendCallback( response.Body ); + var callback = new SteamClient.JobCallback( response.TargetJobID, innerCallback ); + this.Client.PostCallback( callback ); #endif } #endregion