コード例 #1
0
ファイル: Callbacks.cs プロジェクト: zhanggvi/SteamKit
            internal ClanStateCallback(CMsgClientClanState msg)
            {
                ClanID = msg.steamid_clan;

                AccountFlags    = ( EAccountFlags )msg.clan_account_flags;
                ChatRoomPrivate = msg.chat_room_private;

                if (msg.name_info != null)
                {
                    ClanName   = msg.name_info.clan_name;
                    AvatarHash = msg.name_info.sha_avatar;
                }

                if (msg.user_counts != null)
                {
                    MemberTotalCount    = msg.user_counts.members;
                    MemberOnlineCount   = msg.user_counts.online;
                    MemberChattingCount = msg.user_counts.chatting;
                    MemberInGameCount   = msg.user_counts.in_game;
                }

                var events = msg.events
                             .Select(e => new Event(e))
                             .ToList();

                Events = new ReadOnlyCollection <Event>(events);

                var announcements = msg.announcements
                                    .Select(a => new Event(a))
                                    .ToList();

                Announcements = new ReadOnlyCollection <Event>(announcements);
            }
コード例 #2
0
        internal async Task UpdateClan(CMsgClientClanState clan)
        {
            IClan before;
            IClan after;

            await _slim.WaitAsync();

            try
            {
                before = _clans[clan.steamid_clan];

                if (before is UnknownClan)
                {
                    after = Clan.Create(Client, before.Relationship, clan);
                }
                else
                {
                    after = (before as Clan).WithState(clan);
                }

                _clans[after.Id] = after;
            }
            finally
            {
                _slim.Release();
            }

            await InvokeClanUpdated(before, after).ConfigureAwait(false);

            await Task.WhenAll(clan.announcements.Concat(clan.events).Select(e => new Event(e.gid, e.event_time, e.headline, e.game_id, e.just_posted)).Select(e => InvokeClanEventStarted(after, e))).ConfigureAwait(false);
        }
コード例 #3
0
        internal Clan WithState(CMsgClientClanState state)
        {
            var before = (Clan)MemberwiseClone();

            before._flags = (AccountFlags)state.clan_account_flags;
            if (state.name_info != null)
            {
                before._name   = state.name_info.clan_name;
                before._avatar = ImmutableArray.Create(state.name_info.sha_avatar);
            }
            if (state.user_counts != null)
            {
                before._members  = state.user_counts.members;
                before._online   = state.user_counts.online;
                before._chatting = state.user_counts.chatting;
                before._ingame   = state.user_counts.in_game;
            }

            return(before);
        }
コード例 #4
0
 private async Task ReceiveClanUpdate(CMsgClientClanState state)
 {
     await _friends.UpdateClan(state);
 }
コード例 #5
0
 internal static Clan Create(SteamNetworkClient client, ClanRelationship relationship, CMsgClientClanState state)
 {
     return(new Clan(client, state.steamid_clan).WithRelationship(relationship).WithState(state));
 }