Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Requests persona state for a specified SteamID.
        /// Results are returned in <see cref="SteamFriends.PersonaStateCallback"/>.
        /// </summary>
        /// <param name="steamId">A SteamID to request the info of.</param>
        /// <param name="requestedInfo">The requested info flags. If none specified, this uses <see cref="SteamConfiguration.DefaultPersonaStateFlags"/>.</param>
        public void RequestFriendInfo(SteamID steamId, EClientPersonaStateFlag requestedInfo = 0)
        {
            if (steamId == null)
            {
                throw new ArgumentNullException(nameof(steamId));
            }

            RequestFriendInfo(new SteamID[] { steamId }, requestedInfo);
        }
Beispiel #3
0
        /// <summary>
        /// Requests persona state for a list of specified SteamID.
        /// Results are returned in <see cref="SteamFriends.PersonaStateCallback"/>.
        /// </summary>
        /// <param name="steamIdList">A list of SteamIDs to request the info of.</param>
        /// <param name="requestedInfo">The requested info flags.</param>
        public void RequestFriendInfo(IEnumerable <SteamID> steamIdList, EClientPersonaStateFlag requestedInfo = defaultInfoRequest)
        {
            var request = new ClientMsgProtobuf <CMsgClientRequestFriendData>(EMsg.ClientRequestFriendData);

            request.Body.friends.AddRange(steamIdList.Select(sID => sID.ConvertToUInt64()));
            request.Body.persona_state_requested = ( uint )requestedInfo;

            this.Client.Send(request);
        }
Beispiel #4
0
        /// <summary>
        /// Requests persona state for a list of specified SteamID.
        /// Results are returned in <see cref="SteamFriends.PersonaStateCallback"/>.
        /// </summary>
        /// <param name="steamIdList">A list of SteamIDs to request the info of.</param>
        /// <param name="requestedInfo">The requested info flags. If none specified, this uses <see cref="SteamConfiguration.DefaultPersonaStateFlags"/>.</param>
        public void RequestFriendInfo(IEnumerable <SteamID> steamIdList, EClientPersonaStateFlag requestedInfo = default(EClientPersonaStateFlag))
        {
            if (steamIdList == null)
            {
                throw new ArgumentNullException(nameof(steamIdList));
            }

            if (requestedInfo == default(EClientPersonaStateFlag))
            {
                requestedInfo = Client.Configuration.DefaultPersonaStateFlags;
            }

            var request = new ClientMsgProtobuf <CMsgClientRequestFriendData>(EMsg.ClientRequestFriendData);

            request.Body.friends.AddRange(steamIdList.Select(sID => sID.ConvertToUInt64()));
            request.Body.persona_state_requested = ( uint )requestedInfo;

            this.Client.Send(request);
        }
Beispiel #5
0
 /// <summary>
 /// Requests persona state for a specified SteamID.
 /// Results are returned in <see cref="SteamFriends.PersonaStateCallback"/>.
 /// </summary>
 /// <param name="steamId">A SteamID to request the info of.</param>
 /// <param name="requestedInfo">The requested info flags.</param>
 public void RequestFriendInfo( SteamID steamId, EClientPersonaStateFlag requestedInfo = defaultInfoRequest )
 {
     RequestFriendInfo( new SteamID[] { steamId }, requestedInfo );
 }
Beispiel #6
0
        /// <summary>
        /// Requests persona state for a list of specified SteamID.
        /// Results are returned in <see cref="SteamFriends.PersonaStateCallback"/>.
        /// </summary>
        /// <param name="steamIdList">A list of SteamIDs to request the info of.</param>
        /// <param name="requestedInfo">The requested info flags.</param>
        public void RequestFriendInfo( IEnumerable<SteamID> steamIdList, EClientPersonaStateFlag requestedInfo = defaultInfoRequest )
        {
            var request = new ClientMsgProtobuf<CMsgClientRequestFriendData>( EMsg.ClientRequestFriendData );

            request.Body.friends.AddRange( steamIdList.Select( sID => sID.ConvertToUInt64() ) );
            request.Body.persona_state_requested = ( uint )requestedInfo;

            this.Client.Send( request );
        }
 public ISteamConfigurationBuilder WithDefaultPersonaStateFlags(EClientPersonaStateFlag personaStateFlags)
 {
     state.DefaultPersonaStateFlags = personaStateFlags;
     return(this);
 }
Beispiel #8
0
 /// <summary>
 /// Requests persona state for a specified SteamID.
 /// Results are returned in <see cref="SteamFriends.PersonaStateCallback"/>.
 /// </summary>
 /// <param name="steamId">A SteamID to request the info of.</param>
 /// <param name="requestedInfo">The requested info flags.</param>
 public void RequestFriendInfo(SteamID steamId, EClientPersonaStateFlag requestedInfo = defaultInfoRequest)
 {
     RequestFriendInfo(new SteamID[] { steamId }, requestedInfo);
 }