Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
- fix iOS deinit [weak self] crash
  - fix `engine()` build error
  • Loading branch information
LichKing-2234 committed Oct 1, 2020
commit 3217070aa3d6a0b35f36c0bb72aacebe1cd3c4ce
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
## THE CHANGELOG

#### 3.1.2-rc.2
- fix iOS `deinit` `[weak self]` crash
- fix `engine()` build error

#### 3.1.2-rc.1
- make `RtcChannel.channelId` public

Expand Down
27 changes: 15 additions & 12 deletions ios/RCTAgora/React/RCTAgoraRtcChannelModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,18 @@ class RCTAgoraRtcChannelModule: RCTEventEmitter {
static let REACT_CLASS = "RCTAgoraRtcChannelModule"

private var hasListeners = false
private lazy var manager: RtcChannelManager = {
return RtcChannelManager() { [weak self] methodName, data in
private var manager: RtcChannelManager?

override init() {
super.init()
manager = RtcChannelManager() { [weak self] methodName, data in
self?.emit(methodName, data)
}
}()
}

deinit {
manager?.Release()
}

override class func moduleName() -> String! {
return RCTAgoraRtcChannelModule.REACT_CLASS
Expand All @@ -28,10 +35,6 @@ class RCTAgoraRtcChannelModule: RCTEventEmitter {
return ["prefix": RtcChannelEventHandler.PREFIX]
}

deinit {
manager.Release()
}

override class func requiresMainQueueSetup() -> Bool {
return true
}
Expand Down Expand Up @@ -66,18 +69,18 @@ class RCTAgoraRtcChannelModule: RCTEventEmitter {
return (bridge.module(for: RCTAgoraRtcEngineModule.classForCoder()) as? RCTAgoraRtcEngineModule)?.engine
}

public func channel(_ channelId: String) -> AgoraRtcChannel? {
return manager[channelId]
func channel(_ channelId: String) -> AgoraRtcChannel? {
return manager?[channelId]
}

@objc func callMethod(_ methodName: String, _ params: NSDictionary?, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
if let `params` = params {
if methodName == "create" {
params.setValue(engine(), forKey: "engine")
params.setValue(engine, forKey: "engine")
}
manager.perform(NSSelectorFromString(methodName + "::"), with: params, with: PromiseCallback(resolve, reject))
manager?.perform(NSSelectorFromString(methodName + "::"), with: params, with: PromiseCallback(resolve, reject))
} else {
manager.perform(NSSelectorFromString(methodName + ":"), with: PromiseCallback(resolve, reject))
manager?.perform(NSSelectorFromString(methodName + ":"), with: PromiseCallback(resolve, reject))
}
}
}
23 changes: 13 additions & 10 deletions ios/RCTAgora/React/RCTAgoraRtcEngineModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,18 @@ class RCTAgoraRtcEngineModule: RCTEventEmitter {
static let REACT_CLASS = "RCTAgoraRtcEngineModule"

private var hasListeners = false
private lazy var manager: RtcEngineManager = {
return RtcEngineManager() { [weak self] methodName, data in
private var manager: RtcEngineManager?

override init() {
super.init()
manager = RtcEngineManager() { [weak self] methodName, data in
self?.emit(methodName, data)
}
}()
}

deinit {
manager?.Release()
}

override class func moduleName() -> String! {
return RCTAgoraRtcEngineModule.REACT_CLASS
Expand All @@ -28,10 +35,6 @@ class RCTAgoraRtcEngineModule: RCTEventEmitter {
return ["prefix": RtcEngineEventHandler.PREFIX]
}

deinit {
manager.Release()
}

override class func requiresMainQueueSetup() -> Bool {
return true
}
Expand Down Expand Up @@ -63,14 +66,14 @@ class RCTAgoraRtcEngineModule: RCTEventEmitter {
}

weak var engine: AgoraRtcEngineKit? {
return manager.engine
return manager?.engine
}

@objc func callMethod(_ methodName: String, _ params: NSDictionary?, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
if let `params` = params {
manager.perform(NSSelectorFromString(methodName + "::"), with: params, with: PromiseCallback(resolve, reject))
manager?.perform(NSSelectorFromString(methodName + "::"), with: params, with: PromiseCallback(resolve, reject))
} else {
manager.perform(NSSelectorFromString(methodName + ":"), with: PromiseCallback(resolve, reject))
manager?.perform(NSSelectorFromString(methodName + ":"), with: PromiseCallback(resolve, reject))
}
}
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-native-agora",
"version": "3.1.2-rc.1",
"version": "3.1.2-rc.2",
"description": "React Native around the Agora RTC SDKs for Android and iOS agora",
"summary": "agora native sdk for react-native",
"main": "lib/index.js",
Expand Down