public void FriendListRequest(MsgrClient client, Packet packet)
{
var user = client.User;
// Lists are sorted alphabetically by the client
var groups = MsgrServer.Instance.Database.GetGroups(user);
var friends = MsgrServer.Instance.Database.GetFriends(user);
user.Groups.Clear();
foreach (var group in groups)
{
user.Groups.Add(group.Id);
}
user.Friends.Clear();
user.Friends.AddRange(friends);
Send.GroupList(client, groups);
Send.FriendListRequestR(client, friends);
// Notify friends about user going online
var friendUsers = MsgrServer.Instance.UserManager.Get(user.GetNormalFriendIds());
if (friendUsers.Count != 0)
{
Send.FriendOnline(friendUsers, user);
}
// Notify user about online friends
friendUsers = MsgrServer.Instance.UserManager.Get(user.GetFriendIds());
foreach (var friendUser in friendUsers.Where(a => a.GetFriendshipStatus(user.Id) == FriendshipStatus.Normal))
{
Send.FriendOnline(client.User, friendUser);
}
// Notify guild members
var guild = MsgrServer.Instance.GuildManager.FindGuildWithMember(user.CharacterId);
if (guild != null)
{
var member = guild.GetMember(user.CharacterId);
GuildManager.ForOnlineMembers(guild, memberUser => Send.GuildMemberState(memberUser.Client, guild, member, user, user.Status));
}
}