@@ -42,6 +42,7 @@ - (void)cancelTimer;
4242- (void )doTick : (data_report_t )data_buf ;
4343@end
4444
45+ __unsafe_unretained id <TIoTCoreXP2PBridgeDelegate> BridgeDelegate = nil ;
4546const char * XP2PMsgHandle (const char *idd, XP2PType type, const char * msg) {
4647
4748 BOOL logEnable = [TIoTCoreXP2PBridge sharedInstance ].logEnable ;
@@ -113,22 +114,23 @@ - (void)doTick:(data_report_t)data_buf;
113114 });
114115 }
115116
116-
117- dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(0 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
118- id <TIoTCoreXP2PBridgeDelegate> delegate = [TIoTCoreXP2PBridge sharedInstance ].delegate ;
119- if ([delegate respondsToSelector: @selector (reviceEventMsgWithID:eventType:msg: )]) {
120- [delegate reviceEventMsgWithID: DeviceName eventType: type msg: msg];
121- }
122- });
117+ __weak typeof (id <TIoTCoreXP2PBridgeDelegate>) weakDelegate = BridgeDelegate;
118+ if (weakDelegate) {
119+ dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(0 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
120+ if (weakDelegate && [weakDelegate respondsToSelector: @selector (reviceEventMsgWithID:eventType:msg: )]) {
121+ [weakDelegate reviceEventMsgWithID: DeviceName eventType: type msg: msg];
122+ }
123+ });
124+ }
123125 }
124126 return nullptr ;
125127}
126128
127129void XP2PDataMsgHandle (const char *idd, uint8_t * recv_buf, size_t recv_len) {
128130 NSString *DeviceName = [NSString stringWithCString: idd encoding: [NSString defaultCStringEncoding ]]?:@" " ;
129- id <TIoTCoreXP2PBridgeDelegate> delegate = [TIoTCoreXP2PBridge sharedInstance ]. delegate ;
130- if ([delegate respondsToSelector: @selector (getVideoPacketWithID:data:len: )]) {
131- [delegate getVideoPacketWithID: DeviceName data: recv_buf len: recv_len];
131+ __weak typeof ( id <TIoTCoreXP2PBridgeDelegate>) weakDelegate = BridgeDelegate ;
132+ if (weakDelegate && [weakDelegate respondsToSelector: @selector (getVideoPacketWithID:data:len: )]) {
133+ [weakDelegate getVideoPacketWithID: DeviceName data: recv_buf len: recv_len];
132134 }
133135}
134136
@@ -138,12 +140,12 @@ void XP2PDataMsgHandle(const char *idd, uint8_t* recv_buf, size_t recv_len) {
138140
139141 NSString *response = @" {\" status\" :0}" ; // 默认返回值
140142
141- id <TIoTCoreXP2PBridgeDelegate> delegate = [TIoTCoreXP2PBridge sharedInstance ]. delegate ;
142- if ([delegate respondsToSelector: @selector (reviceDeviceMsgWithID:data: )]) {
143+ __weak typeof ( id <TIoTCoreXP2PBridgeDelegate>) weakDelegate = BridgeDelegate ;
144+ if (weakDelegate && [weakDelegate respondsToSelector: @selector (reviceDeviceMsgWithID:data: )]) {
143145
144146 NSString *DeviceName = [NSString stringWithCString: idd encoding: [NSString defaultCStringEncoding ]]?:@" " ;
145147 NSData *DeviceData = [NSData dataWithBytes: recv_buf length: recv_len];
146- NSString *res = [delegate reviceDeviceMsgWithID: DeviceName data: DeviceData];
148+ NSString *res = [weakDelegate reviceDeviceMsgWithID: DeviceName data: DeviceData];
147149 if (res) {
148150 response = res;
149151 }
@@ -285,6 +287,11 @@ BOOL checkVersionAfterPercent(NSString *input) {
285287 return isVersionLessThanTarget (versionString, @" 2.4.49" );
286288}
287289
290+ - (void )setDelegate : (id <TIoTCoreXP2PBridgeDelegate>)delegate {
291+ _delegate = delegate;
292+ BridgeDelegate = _delegate;
293+ }
294+
288295- (XP2PErrCode)startAppWith : (NSString *)pro_id dev_name : (NSString *)dev_name appconfig : (TIoTP2PAPPConfig *)appconfig {
289296 appconfig.userid = [self getAppUUID ];
290297 appconfig.pro_id = pro_id;
0 commit comments