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; 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; cacheFriend.PersonaStateFlags = ( EPersonaStateFlag )friend.persona_state_flags; } if ((flags & EClientPersonaStateFlag.GameDataBlob) == EClientPersonaStateFlag.GameDataBlob) { 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; } if ((flags & EClientPersonaStateFlag.Presence) == EClientPersonaStateFlag.Presence) { cacheClan.AvatarHash = friend.avatar_hash; } } else { } // todo: cache other details/account types? } foreach (var friend in perState.Body.friends) { var callback = new PersonaStateCallback(friend); this.Client.PostCallback(callback); } }
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; 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; cacheFriend.PersonaStateFlags = ( EPersonaStateFlag )friend.persona_state_flags; } if ( ( flags & EClientPersonaStateFlag.GameDataBlob ) == EClientPersonaStateFlag.GameDataBlob ) { 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; } if ( (flags & EClientPersonaStateFlag.Presence) == EClientPersonaStateFlag.Presence ) { cacheClan.AvatarHash = friend.avatar_hash; } } else { } // todo: cache other details/account types? } foreach ( var friend in perState.Body.friends ) { var callback = new PersonaStateCallback( friend ); this.Client.PostCallback( callback ); } }