void HandlePersonaState( IPacketMsg packetMsg )
{
var perState = new ClientMsgProtobuf<CMsgClientPersonaState>( packetMsg );
EClientPersonaStateFlag flags = ( EClientPersonaStateFlag )perState.Body.status_flags;
foreach ( var friend in perState.Body.friends )
{
SteamID friendId = friend.friendid;
SteamID sourceId = friend.steamid_source;
if ( friendId.IsIndividualAccount )
{
User cacheFriend = cache.GetUser( friendId );
if ( ( flags & EClientPersonaStateFlag.PlayerName ) == EClientPersonaStateFlag.PlayerName )
cacheFriend.Name = friend.player_name;
if ( ( flags & EClientPersonaStateFlag.Presence ) == EClientPersonaStateFlag.Presence )
{
cacheFriend.AvatarHash = friend.avatar_hash;
cacheFriend.PersonaState = ( EPersonaState )friend.persona_state;
}
if ( ( flags & EClientPersonaStateFlag.GameExtraInfo ) == EClientPersonaStateFlag.GameExtraInfo )
{
cacheFriend.GameName = friend.game_name;
cacheFriend.GameID = friend.gameid;
cacheFriend.GameAppID = friend.game_played_app_id;
}
}
else if ( friendId.IsClanAccount )
{
Clan cacheClan = cache.Clans.GetAccount( friendId );
if ( ( flags & EClientPersonaStateFlag.PlayerName ) == EClientPersonaStateFlag.PlayerName )
{
cacheClan.Name = friend.player_name;
}
}
else
{
}
// todo: cache other details/account types?
}
foreach ( var friend in perState.Body.friends )
{
#if STATIC_CALLBACKS
var callback = new PersonaStateCallback( Client, friend );
SteamClient.PostCallback( callback );
#else
var callback = new PersonaStateCallback( friend );
this.Client.PostCallback( callback );
#endif
}
}
void HandleFriendResponse( IPacketMsg packetMsg )