public void OnNoticeReceived(AVIMNotice notice) { lock (mutex) { if (notice.RawData.ContainsKey("convs")) { var unreadRawData = notice.RawData["convs"] as List <object>; if (notice.RawData.ContainsKey("notifTime")) { float.TryParse(notice.RawData["notifTime"].ToString(), out NotifTime); } foreach (var data in unreadRawData) { var dataMap = data as IDictionary <string, object>; if (dataMap != null) { var convId = dataMap["cid"].ToString(); var unreadCount = 0; Int32.TryParse(dataMap["unread"].ToString(), out unreadCount); #region restore last message for the conversation var msgStr = dataMap["data"].ToString(); var messageObj = AVRealtime.FreeStyleMessageClassingController.Instantiate(msgStr, dataMap); #endregion var ucn = new UnreadConversationNotice() { ConvId = convId, LastUnreadMessage = messageObj, UnreadCount = unreadCount }; UnreadConversations.Add(ucn); } } } } }
internal static void UpdateNotice(IAVIMMessage message) { lock (sMutex) { var convValidators = UnreadConversations.Where(c => c.ConvId == message.ConversationId); if (convValidators != null) { if (convValidators.Count() > 0) { var currentNotice = convValidators.FirstOrDefault(); currentNotice.AutomicIncrement(); currentNotice.LastUnreadMessage = message; } else { var currentThread = new UnreadConversationNotice(); currentThread.ConvId = message.ConversationId; currentThread.LastUnreadMessage = message; currentThread.AutomicIncrement(); UnreadConversations.Add(currentThread); } } } }