- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I was trying to extend OWTConferenceClientDelegate to rx DelegateProxy but I keep got nil while setCurrentDelegate.
The error said that "mutex lock failed: Invalid argument" in libc++.tbd
Is there anyway to solve this?
Is this error means that the thread which static lib runs in are private or unsafe?
請問是否有人嘗試將ios sdk裡的delegates事件封裝成rx的delegateProxy? 在封裝之後調用rx的delegateProxy事件例如OWTConferenceClientDelegate的conferenceClient:didAddStream: 時會產生mutex lock failed: Invalid argument錯誤
想詢問有人成功將delegates封裝成rx嗎?
import RxSwift
import RxCocoa
private class RxOWTConferenceClientDelegateProxy: DelegateProxy<OWTConferenceClient, OWTConferenceClientDelegate>, DelegateProxyType, OWTConferenceClientDelegate {
public weak private (set) var controller: OWTConferenceClient?
public init(controller: ParentObject) {
self.controller = controller
super.init(parentObject: controller, delegateProxy: RxOWTConferenceClientDelegateProxy.self)
}
static func registerKnownImplementations() {
self.register { RxOWTConferenceClientDelegateProxy(controller: $0) }
}
static func currentDelegate(for object: OWTConferenceClient) -> OWTConferenceClientDelegate? {
return object.delegate
}
static func setCurrentDelegate(_ delegate: OWTConferenceClientDelegate?, to object: OWTConferenceClient) {
object.delegate = delegate <<<<<<< ERROR happens to this line.
}
}
extension Reactive where Base: OWTConferenceClient {
public var delegate: DelegateProxy<OWTConferenceClient, OWTConferenceClientDelegate> {
return RxOWTConferenceClientDelegateProxy.proxy(for: base)
}
func join(token: String) -> Single<OWTConferenceInfo> {
return Single<OWTConferenceInfo>.create { single in
self.base.join(withToken: token,
onSuccess: { (info) in
single(.success(info))
return
},
onFailure: { (error) in
single(.error(error))
return
})
return Disposables.create()
}
}
func doPublish(constraints: OWTStreamConstraints) -> Single<OWTConferencePublication> {
return Single<OWTConferencePublication>.create { single in
var err: NSError?
let localStream = OWTLocalStream(constratins: constraints, error: &err)
if err != nil { single(.error(err!)) }
self.base.publish(localStream,
with: nil,
onSuccess: { single(.success($0))
},
onFailure: { single(.error($0))
})
return Disposables.create()
}
}
func leave() -> Single<Void> {
return Single<Void>.create { single in
self.base.leaveWith(
onSuccess: { single(.success(()))
},
onFailure: { single(.error($0))
})
return Disposables.create()
}
}
public var didAddStream: Observable<OWTRemoteStream> {
return delegate.methodInvoked(#selector(OWTConferenceClientDelegate.conferenceClient(_:didAdd:) as ((OWTConferenceClientDelegate) -> (OWTConferenceClient, OWTRemoteStream) -> Void)?))
.observeOn(MainScheduler.instance)
.map { $0[1] as! OWTRemoteStream }
}
public var didAddParticipant: Observable<OWTConferenceParticipant> {
return delegate.methodInvoked(#selector(OWTConferenceClientDelegate.conferenceClient(_:didAdd:) as ((OWTConferenceClientDelegate) -> (OWTConferenceClient, OWTConferenceParticipant) -> Void)?))
.observeOn(MainScheduler.instance)
.map { $0[1] as! OWTConferenceParticipant }
}
}
- Tags:
- HTML5
- JavaScript*
Link Copied
0 Replies
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page