DoraemonMCCommandExcutor.m 2.5 KB
Newer Older
L
litianhao 已提交
1 2 3 4 5 6 7 8 9 10
//
//  DoraemonMCCommandExcutor.m
//  DoraemonKit-DoraemonKit
//
//  Created by litianhao on 2021/7/12.
//

#import "DoraemonMCCommandExcutor.h"
#import "DoraemonMCEventHandler.h"

W
wangzhipng 已提交
11 12 13
static NSMutableDictionary *eventHandlerMap = nil;
static NSMutableDictionary *externalEventHandlerMap = nil;

L
litianhao 已提交
14 15 16 17 18 19 20 21 22 23 24
@implementation DoraemonMCCommandExcutor

+ (void)excuteMessageStrFromNet:(NSString *)message {
    DoraemonMCMessage *messageInstance = [DoraemonMCMessagePackager parseMessageString:message];
    [self excuteMessage:messageInstance];
    
}

+ (void)excuteMessage:(DoraemonMCMessage *)message {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
25
        DoraemonMCReuseCellEventHandler *handlerReuseCell =  [DoraemonMCReuseCellEventHandler new];
L
litianhao 已提交
26 27
        eventHandlerMap = @{
            @(DoraemonMCMessageTypeControl): [DoraemonMCControlEventHandler new],
28 29
            @(DoraemonMCMessageTypeDidSelectCell) : handlerReuseCell,
            @(DoraemonMCMessageTypeDidScrollToCell) : handlerReuseCell,
L
litianhao 已提交
30
            @(DoraemonMCMessageTypeGuesture) : [DoraemonMCGestureRecognizerEventHandler new],
31 32
            @(DoraemonMCMessageTypeTextInput) : [DoraemonMCTextFiledEventHandler new],
            @(DoraemonMCMessageTypeTarbarSelected) : [DoraemonMCTabbarEventHandler new]
L
litianhao 已提交
33
        };
W
wangzhipng 已提交
34
        externalEventHandlerMap = [NSMutableDictionary new];
L
litianhao 已提交
35 36 37 38 39 40 41 42 43
    });

    [eventHandlerMap enumerateKeysAndObjectsUsingBlock:^(NSNumber * _Nonnull typeNumber, DoraemonMCEventHandler * _Nonnull eventHandler, BOOL * _Nonnull stop) {
        if (message.type  == typeNumber.intValue) {
            [eventHandler handleEvent:message];
            *stop = YES;
        }
    }];
    
W
wangzhipng 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
    
    [externalEventHandlerMap enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull typeString, DoraemonMCEventHandler * _Nonnull eventHandler, BOOL * _Nonnull stop) {
        if ([message.customType isEqualToString:typeString]) {
            [eventHandler handleEvent:message];
            *stop = YES;
        }
    }];

    
}

//增加自定义事件
+ (void)addCustomMessage:(NSString *)type eventHandlerName:(DoraemonMCEventHandler *)eventHandler {
    if (eventHandler && type) {
        
        [externalEventHandlerMap enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull typeString, DoraemonMCEventHandler * _Nonnull eventHandler, BOOL * _Nonnull stop) {
            if ([type isEqualToString:typeString]) {
                *stop = YES;
                NSAssert(stop, @"重复添加事件");
            }
        }];
        
        [externalEventHandlerMap setValue:eventHandler forKey:type];
    }
L
litianhao 已提交
68 69
}

W
wangzhipng 已提交
70 71 72 73




L
litianhao 已提交
74
@end