提交
This commit is contained in:
101
QXLive/Manager/QXRedPacketManager.m
Normal file
101
QXLive/Manager/QXRedPacketManager.m
Normal file
@@ -0,0 +1,101 @@
|
||||
//
|
||||
// QXRedPacketManager.m
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/10/11.
|
||||
//
|
||||
|
||||
#import "QXRedPacketManager.h"
|
||||
|
||||
@interface QXRedPacketManager ()
|
||||
@property (nonatomic, strong) NSMutableDictionary<NSString *, QXRedPacketModel *> *redPackets;
|
||||
@property (nonatomic, strong) NSTimer *checkTimer;
|
||||
@end
|
||||
|
||||
@implementation QXRedPacketManager
|
||||
|
||||
+ (instancetype)sharedManager {
|
||||
static QXRedPacketManager *instance = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
instance = [[QXRedPacketManager alloc] init];
|
||||
});
|
||||
return instance;
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_redPackets = [NSMutableDictionary dictionary];
|
||||
[self startCheckTimer];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)addRedPacket:(QXRedPacketModel *)redPacket {
|
||||
if (!redPacket.packetId) return;
|
||||
|
||||
self.redPackets[redPacket.packetId] = redPacket;
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didAddRedPacket:)]) {
|
||||
[self.delegate respondsToSelector:@selector(QXRedPacketManager:didAddRedPacket:)];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)removeRedPacket:(NSString *)packetId {
|
||||
[self.redPackets removeObjectForKey:packetId];
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didRemoveRedPacket:)]) {
|
||||
[self.delegate QXRedPacketManager:self didRemoveRedPacket:packetId];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSArray<QXRedPacketModel *> *)allRedPackets {
|
||||
return [self.redPackets allValues];
|
||||
}
|
||||
|
||||
- (QXRedPacketModel *)redPacketAtPosition:(NSInteger)position {
|
||||
for (QXRedPacketModel *packet in self.redPackets.allValues) {
|
||||
if (packet.position == position) {
|
||||
return packet;
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)startCheckTimer {
|
||||
self.checkTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
|
||||
target:self
|
||||
selector:@selector(checkAndUpdateRedPackets)
|
||||
userInfo:nil
|
||||
repeats:YES];
|
||||
}
|
||||
|
||||
- (void)checkAndUpdateRedPackets {
|
||||
NSArray *packets = [self.allRedPackets copy];
|
||||
|
||||
for (QXRedPacketModel *packet in packets) {
|
||||
BOOL wasAvailable = packet.isAvailable;
|
||||
packet.isAvailable = [packet canOpenNow];
|
||||
|
||||
// 状态发生变化时通知
|
||||
if (wasAvailable != packet.isAvailable) {
|
||||
if ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didUpdateRedPacket:)]) {
|
||||
[self.delegate QXRedPacketManager:self didUpdateRedPacket:packet];
|
||||
}
|
||||
}
|
||||
|
||||
// 倒计时结束的红包可以设置自动移除
|
||||
// if (packet.type == RedPacketTypeCountdown && [packet remainingTime] <= -10) {
|
||||
// // 倒计时结束10秒后自动移除
|
||||
// [self removeRedPacket:packet.packetId];
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[self.checkTimer invalidate];
|
||||
self.checkTimer = nil;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user