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);
             }
         }
     }
 }