1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- //
- // NIMKitNotificationFirer.m
- // NIMKit
- //
- // Created by chris on 16/6/13.
- // Copyright © 2016年 NetEase. All rights reserved.
- //
- #import "NIMKitNotificationFirer.h"
- NSString *const NIMKitUserInfoHasUpdatedNotification = @"NIMKitUserInfoHasUpdatedNotification";
- NSString *const NIMKitTeamInfoHasUpdatedNotification = @"NIMKitTeamInfoHasUpdatedNotification";
- NSString *const NIMKitUserBlackListHasUpdatedNotification = @"NIMKitUserBlackListHasUpdatedNotification";
- NSString *const NIMKitUserMuteListHasUpdatedNotification = @"NIMKitUserMuteListHasUpdatedNotification";
- NSString *const NIMKitTeamMembersHasUpdatedNotification = @"NIMKitTeamMembersHasUpdatedNotification";
- NSString *const NIMKitInfoKey = @"InfoId";
- @implementation NIMKitNotificationFirer
- - (instancetype)init{
- self = [super init];
- if (self) {
- _timer = [[NIMKitTimerHolder alloc] init];
- _timeInterval = 1.0f;
- _cachedInfo = [[NSMutableDictionary alloc] init];
- }
- return self;
- }
- - (void)addFireInfo:(NIMKitFirerInfo *)info{
- NSAssert([NSThread currentThread].isMainThread, @"info must be fired in main thread");
- if (!self.cachedInfo.count) {
- [self.timer startTimer:self.timeInterval delegate:self repeats:NO];
- }
- [self.cachedInfo setObject:info forKey:info.saveIdentity];
- }
- #pragma mark - NIMKitTimerHolderDelegate
- - (void)onNIMKitTimerFired:(NIMKitTimerHolder *)holder{
- NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
- for (NIMKitFirerInfo *info in self.cachedInfo.allValues) {
- NSMutableArray *fireInfos = dict[info.notificationName];
- if (!fireInfos) {
- fireInfos = [[NSMutableArray alloc] init];
- dict[info.notificationName] = fireInfos;
- }
- if (info.fireObject) {
- [fireInfos addObject:info.fireObject];
- }
- }
-
- for (NSString *notificationName in dict) {
- NSDictionary *userInfo = dict[notificationName]? @{ NIMKitInfoKey:dict[notificationName] } : nil;
- [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:nil userInfo:userInfo];
- }
-
- [self.cachedInfo removeAllObjects];
- }
- @end
- @implementation NIMKitFirerInfo
- - (NSObject *)fireObject
- {
- if (self.session) {
- return self.session.sessionId;
- }
- return [NSNull null];
- }
- - (NSString *)saveIdentity
- {
- if (self.session) {
- return [NSString stringWithFormat:@"%@-%zd",self.session.sessionId,self.session.sessionType];;
- }
- return self.notificationName;
- }
- @end
|