| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- //
- // MOTopFloatingManager.m
- // MiMoLive
- //
- // Created by SuperC on 2025/7/23.
- //
- // 主态通道
- const NSInteger MainStateBannerFirst = 1;
- const NSInteger MainStateBannerSecond = 2;
- const NSInteger MainStateBannerThirdPriorityFirst = 3;
- const NSInteger MainStateBannerThirdPrioritySecond = 4;
- const NSInteger MainStateBannerThirdPriorityThird = 5;
- const NSInteger MainStateBannerEnterBarFirst = 6;
- const NSInteger MainStateBannerEnterBarSecond = 7;
- const NSInteger MainStateBannerEnterBarThird = 8;
- // 客态通道
- const NSInteger GuestStateBannerFirst = -1;
- const NSInteger GuestStateBannerSecond = -2;
- const NSInteger GuestStateBannerThirdPriorityFirst = -3;
- const NSInteger GuestStateBannerThirdPrioritySecond = -4;
- const NSInteger GuestStateBannerThirdPriorityThird = -5;
- const NSInteger GuestStateBannerEnterBarFirst = -6;
- const NSInteger GuestStateBannerEnterBarSecond = -7;
- const NSInteger GuestStateBannerEnterBarThird = -8;
- #import "MOTopFloatingManager.h"
- @interface MOTopFloatingManager ()
- @property (nonatomic, strong, readwrite) NSMutableDictionary<NSNumber *, NSMutableArray<MORtmEntity *> *> *dataMap;
- @end
- @implementation MOTopFloatingManager
- #pragma mark - 单例实现
- + (instancetype)sharedManager {
- static MOTopFloatingManager *instance = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- instance = [[self alloc] init];
- });
- return instance;
- }
- // 防止外部调用alloc和new创建实例
- + (instancetype)allocWithZone:(struct _NSZone *)zone {
- static dispatch_once_t onceToken;
- static MOTopFloatingManager *instance = nil;
- dispatch_once(&onceToken, ^{
- instance = [super allocWithZone:zone];
- });
- return instance;
- }
- // 防止通过copy和mutableCopy创建实例
- - (id)copyWithZone:(nullable NSZone *)zone {
- return [MOTopFloatingManager sharedManager];
- }
- - (id)mutableCopyWithZone:(nullable NSZone *)zone {
- return [MOTopFloatingManager sharedManager];
- }
- #pragma mark - 初始化
- - (instancetype)init {
- self = [super init];
- if (self) {
- _dataMap = [NSMutableDictionary dictionary];
- }
- return self;
- }
- #pragma mark - 公共方法
- - (void)addEntity:(MORtmEntity *)entity toChannel:(NSInteger)channelId {
- if (!entity) return;
-
- MOLogV(@"123 - (void)addEntity:(MORtmEntity *)entity toChannel:(NSInteger)channelId --");
-
- @synchronized(self) {
- NSNumber *key = @(channelId);
- NSMutableArray<MORtmEntity *> *list = self.dataMap[key];
-
- if (!list) {
- list = [NSMutableArray array];
- self.dataMap[key] = list;
- }
-
- [list addObject:entity];
- }
- }
- - (void)clearAllChannels {
- [self.dataMap removeAllObjects];
- }
- #pragma mark - 原有方法
- - (MORtmEntity *)getNextTopFloatOneRtmEntity {
- NSArray<NSNumber *> *priorityKeys = @[
- @(MainStateBannerFirst),
- @(MainStateBannerSecond),
- @(GuestStateBannerFirst),
- @(GuestStateBannerSecond)
- ];
-
- return [self getNextEntityFromChannels:priorityKeys];
- }
- - (MORtmEntity *)getNextTopFloatTwoRtmEntity {
- NSArray<NSNumber *> *priorityKeys = @[
- @(MainStateBannerThirdPriorityFirst),
- @(MainStateBannerThirdPrioritySecond),
- @(MainStateBannerThirdPriorityThird),
- @(GuestStateBannerThirdPriorityFirst),
- @(GuestStateBannerThirdPrioritySecond),
- @(GuestStateBannerThirdPriorityThird)
- ];
-
- return [self getNextEntityFromChannels:priorityKeys];
- }
- - (MORtmEntity *)getNextEnterBarFloatRtmEntity {
- NSArray<NSNumber *> *priorityKeys = @[
- @(MainStateBannerEnterBarFirst),
- @(MainStateBannerEnterBarSecond),
- @(MainStateBannerEnterBarThird),
- @(GuestStateBannerEnterBarFirst),
- @(GuestStateBannerEnterBarSecond),
- @(GuestStateBannerEnterBarThird)
- ];
-
- return [self getNextEntityFromChannels:priorityKeys];
- }
- #pragma mark - 私有方法
- - (MORtmEntity *)getNextEntityFromChannels:(NSArray<NSNumber *> *)priorityKeys {
- for (NSNumber *key in priorityKeys) {
- NSMutableArray<MORtmEntity *> *list = self.dataMap[key];
- if (list.count > 0) {
- MORtmEntity *bean = list.firstObject;
- [list removeObjectAtIndex:0];
- return bean;
- }
- }
-
- return nil;
- }
- @end
|