public ServerMessage ComposeUpdateList() { lock (mInnerUpdates) { List <MessengerUpdate> UpdateInfo = new List <MessengerUpdate>(); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { foreach (uint FriendId in mInner) { if (!mInnerUpdates.ContainsKey(FriendId)) { continue; } CharacterInfo Info = CharacterInfoLoader.GetCharacterInfo(MySqlClient, FriendId); if (Info == null) { continue; } UpdateInfo.Add(new MessengerUpdate(mInnerUpdates[FriendId], Info)); } mInnerUpdates.Clear(); } return(MessengerUpdateListComposer.Compose(UpdateInfo)); } }
private static void OnFriendRemove(Session Session, ClientMessage Message) { int Amount = Message.PopWiredInt32(); // Precaution: limit queries to 50 if (Amount > 50) { Amount = 50; } List <MessengerUpdate> LocalUpdates = new List <MessengerUpdate>(); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { for (int i = 0; i < Amount; i++) { uint FriendId = Message.PopWiredUInt32(); if (DestroyFriendship(MySqlClient, Session.CharacterId, FriendId)) { Session.MessengerFriendCache.RemoveFromCache(FriendId); LocalUpdates.Add(new MessengerUpdate(-1, CharacterInfoLoader.GenerateNullCharacter(FriendId))); Session TargetSession = SessionManager.GetSessionByCharacterId(FriendId);; if (TargetSession != null) { TargetSession.MessengerFriendCache.RemoveFromCache(Session.CharacterId); TargetSession.SendData(MessengerUpdateListComposer.Compose(new List <MessengerUpdate>() { new MessengerUpdate(-1, CharacterInfoLoader.GenerateNullCharacter(Session.CharacterId)) })); } } } } Session.SendData(MessengerUpdateListComposer.Compose(LocalUpdates)); }