提交
This commit is contained in:
@@ -9,9 +9,27 @@
|
||||
#import "MQTTClient.h"
|
||||
#import "MQTTSessionManager.h"
|
||||
#import <CommonCrypto/CommonHMAC.h>
|
||||
//typedef NS_ENUM(NSInteger) {
|
||||
// /// 巡乐会进度更新
|
||||
// QXManagerMqttTypeAcProgress = 100,
|
||||
// /// 巡乐会即将开始
|
||||
// QXManagerMqttTypeAcWill = 101,
|
||||
// /// 巡乐会已经开始
|
||||
// QXManagerMqttTypeAcStart = 102,
|
||||
// /// 巡乐会结束落包
|
||||
// QXManagerMqttTypeAcEnd = 103,
|
||||
// /// 有人锁定了礼物
|
||||
// QXManagerMqttTypeAcLock = 103,
|
||||
//}QXManagerMqttType;
|
||||
|
||||
/// 礼物话题
|
||||
static NSString * _Nonnull qx_room_topic = @"qx_room_topic";
|
||||
/// 巡乐会话题
|
||||
static NSString * _Nonnull qx_ac_topic = @"qx_xunlehui";
|
||||
/// 小时榜话题
|
||||
static NSString * _Nonnull qx_hour_ranking = @"qx_hour_ranking";
|
||||
/// 红包话题
|
||||
static NSString * _Nonnull qx_red_redpacket = @"qx_redpacket_arrive";
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
@protocol MQTTClientModelDelegate <NSObject>
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
[self subscribeTopic:qx_room_topic];
|
||||
[self subscribeTopic:qx_ac_topic];
|
||||
[self subscribeTopic:qx_hour_ranking];
|
||||
[self subscribeTopic:qx_red_redpacket];
|
||||
[self reConnectForStateError];
|
||||
|
||||
break;
|
||||
|
||||
@@ -10,9 +10,16 @@
|
||||
|
||||
@class QXRedPacketManager;
|
||||
@protocol QXRedPacketManagerDelegate <NSObject>
|
||||
- (void)QXRedPacketManager:(QXRedPacketManager *)manager didAddRedPacket:(QXRedPacketModel *)redPacket;
|
||||
- (void)QXRedPacketManager:(QXRedPacketManager *)manager didRemoveRedPacket:(NSString *)packetId;
|
||||
- (void)QXRedPacketManager:(QXRedPacketManager *)manager didUpdateRedPacket:(QXRedPacketModel *)redPacket;
|
||||
/// 推送添加单个红包回调
|
||||
- (void)QXRedPacketManager:(QXRedPacketManager *)manager didAddRedPacket:(QXRedPacketModel *)redPacket remainingCount:(NSInteger)remainingCount;
|
||||
/// 首次获取房间内红包列表进行添加后回调
|
||||
- (void)QXRedPacketManager:(QXRedPacketManager *)manager didAddRedPackets:(NSArray<QXRedPacketModel *>*)redPackets remainingCount:(NSInteger)remainingCount;
|
||||
/// 红包从列表移除后的回调
|
||||
- (void)QXRedPacketManager:(QXRedPacketManager *)manager didRemoveRedPacket:(NSString *)packetId remainingCount:(NSInteger)remainingCount;
|
||||
/// 红包状态发生变化时回调(由不可抢到可抢)
|
||||
- (void)QXRedPacketManager:(QXRedPacketManager *)manager didUpdateRedPacket:(QXRedPacketModel *)redPacket remainingCount:(NSInteger)remainingCount;
|
||||
/// 红包状态发生变化时回调(由不可抢到可抢)
|
||||
- (void)QXRedPacketManager:(QXRedPacketManager *)manager didUpdateRedPacketTime:(long)time redPacket:(QXRedPacketModel *)redPacket;
|
||||
@end
|
||||
|
||||
@interface QXRedPacketManager : NSObject
|
||||
@@ -20,16 +27,24 @@
|
||||
@property (nonatomic, weak) id<QXRedPacketManagerDelegate> delegate;
|
||||
|
||||
+ (instancetype)sharedManager;
|
||||
|
||||
/// 批量添加红包
|
||||
- (void)addRedPackets:(NSArray<QXRedPacketModel *>*)redPackets;
|
||||
/// 添加红包
|
||||
- (void)addRedPacket:(QXRedPacketModel *)redPacket;
|
||||
/// 移除红包
|
||||
- (void)removeRedPacket:(NSString *)packetId;
|
||||
/// 获取所有红包
|
||||
- (NSArray<QXRedPacketModel *> *)allRedPackets;
|
||||
/// 根据位置获取红包
|
||||
- (QXRedPacketModel *)redPacketAtPosition:(NSInteger)position;
|
||||
/// 根据红包id获取红包
|
||||
- (QXRedPacketModel *)getRedPacket:(NSString *)packetId;
|
||||
/// 检查并更新红包状态
|
||||
- (void)checkAndUpdateRedPackets;
|
||||
|
||||
/// 移除所有红包
|
||||
-(void)removeAllRedpackets;
|
||||
/// 开启定时器
|
||||
-(void)startCheckTimer;
|
||||
/// 销毁定时器
|
||||
-(void)endCheckTimer;
|
||||
/// 回收内存
|
||||
-(void)destoryRedpacketInfo;
|
||||
@end
|
||||
|
||||
@@ -27,26 +27,35 @@
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_redPackets = [NSMutableDictionary dictionary];
|
||||
[self startCheckTimer];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)addRedPackets:(NSArray<QXRedPacketModel *> *)redPackets{
|
||||
if (redPackets.count == 0) {
|
||||
return;
|
||||
}
|
||||
for (QXRedPacketModel*md in redPackets) {
|
||||
self.redPackets[md.redpacket_id] = md;
|
||||
}
|
||||
if ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didAddRedPackets:remainingCount:)]) {
|
||||
[self.delegate QXRedPacketManager:[QXRedPacketManager sharedManager] didAddRedPackets:redPackets remainingCount:self.redPackets.count];
|
||||
}
|
||||
}
|
||||
- (void)addRedPacket:(QXRedPacketModel *)redPacket {
|
||||
if (!redPacket.redpacket_id) return;
|
||||
|
||||
self.redPackets[redPacket.redpacket_id] = redPacket;
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didAddRedPacket:)]) {
|
||||
[self.delegate respondsToSelector:@selector(QXRedPacketManager:didAddRedPacket:)];
|
||||
if ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didAddRedPacket:remainingCount:)]) {
|
||||
[self.delegate QXRedPacketManager:[QXRedPacketManager sharedManager] didAddRedPacket:redPacket remainingCount:self.redPackets.count];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)removeRedPacket:(NSString *)packetId {
|
||||
[self.redPackets removeObjectForKey:packetId];
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didRemoveRedPacket:)]) {
|
||||
[self.delegate QXRedPacketManager:self didRemoveRedPacket:packetId];
|
||||
if ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didRemoveRedPacket:remainingCount:)]) {
|
||||
[self.delegate QXRedPacketManager:[QXRedPacketManager sharedManager] didRemoveRedPacket:packetId remainingCount:self.redPackets.count];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,13 +63,8 @@
|
||||
return [self.redPackets allValues];
|
||||
}
|
||||
|
||||
- (QXRedPacketModel *)redPacketAtPosition:(NSInteger)position {
|
||||
for (QXRedPacketModel *packet in self.redPackets.allValues) {
|
||||
if (packet.position == position) {
|
||||
return packet;
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
-(QXRedPacketModel *)getRedPacket:(NSString *)packetId{
|
||||
return [self.redPackets objectForKey:packetId];
|
||||
}
|
||||
|
||||
- (void)startCheckTimer {
|
||||
@@ -75,27 +79,52 @@
|
||||
NSArray *packets = [self.allRedPackets copy];
|
||||
|
||||
for (QXRedPacketModel *packet in packets) {
|
||||
// 倒计时结束的红包可以设置自动移除
|
||||
long packetTime = [packet remainingTime];
|
||||
if ((packetTime <= -packet.redpacket_time.intValue)) {
|
||||
// 倒计时结束10秒后自动移除
|
||||
[self removeRedPacket:packet.redpacket_id];
|
||||
}
|
||||
if (packet.countdown.intValue == 0) {
|
||||
continue;
|
||||
}
|
||||
if ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didUpdateRedPacketTime:redPacket:)]) {
|
||||
[self.delegate QXRedPacketManager:[QXRedPacketManager sharedManager] didUpdateRedPacketTime:packetTime redPacket:packet];
|
||||
}
|
||||
|
||||
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 ([self.delegate respondsToSelector:@selector(QXRedPacketManager:didUpdateRedPacket:remainingCount:)]) {
|
||||
[self.delegate QXRedPacketManager:[QXRedPacketManager sharedManager] didUpdateRedPacket:packet remainingCount:self.redPackets.count];
|
||||
}
|
||||
}
|
||||
|
||||
// 倒计时结束的红包可以设置自动移除
|
||||
// if (packet.type == RedPacketTypeCountdown && [packet remainingTime] <= -10) {
|
||||
// // 倒计时结束10秒后自动移除
|
||||
// [self removeRedPacket:packet.packetId];
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
-(void)removeAllRedpackets{
|
||||
[self.redPackets removeAllObjects];
|
||||
}
|
||||
-(void)endCheckTimer{
|
||||
if (self.checkTimer) {
|
||||
[self.checkTimer invalidate];
|
||||
self.checkTimer = nil;
|
||||
}
|
||||
}
|
||||
-(void)destoryRedpacketInfo{
|
||||
[self removeAllRedpackets];
|
||||
[self endCheckTimer];
|
||||
self.delegate = nil;
|
||||
}
|
||||
- (void)dealloc {
|
||||
if (self.checkTimer) {
|
||||
[self.checkTimer invalidate];
|
||||
self.checkTimer = nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[self.checkTimer invalidate];
|
||||
self.checkTimer = nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -617,7 +617,7 @@
|
||||
}
|
||||
break;
|
||||
case QXRoomMessageTypeSendRedpacket:{
|
||||
QXRedPacketModel *model = [QXRedPacketModel yy_modelWithJSON:msg.Text];
|
||||
QXRedPacketModel *model = [QXRedPacketModel yy_modelWithJSON:msg.Text[@"redpacketInfo"]];
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(recievedRedPacket:)]) {
|
||||
[self.delegate recievedRedPacket:model];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user