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); }
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); }
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); }
private async Task ReceiveClanUpdate(CMsgClientClanState state) { await _friends.UpdateClan(state); }
internal static Clan Create(SteamNetworkClient client, ClanRelationship relationship, CMsgClientClanState state) { return(new Clan(client, state.steamid_clan).WithRelationship(relationship).WithState(state)); }