CocoaAsyncSocket 및 STOMP 프로토콜을 기반으로 간단한 메시지 앱을 만들고 있습니다.CocoaAsyncSocket을 사용하여 PublishSubject를 올바르게 사용합니다.
class StompStream: NSObject {
//MARK: - Public
var inputFrame = PublishSubject<StompFrame>()
//MARK: - Private
fileprivate var socket: GCDAsyncSocket!
...
...
fileprivate func parse(withData data: Data) {
let string = String(data: data, encoding: .utf8)
do {
let frame = try StompFrame(text: string)
self.inputFrame.on(.next(frame))
} catch {
self.inputFrame.on(.error(error))
}
}
}
//MARK: - GCDAsyncSocketDelegate methods
extension StompStream: GCDAsyncSocketDelegate {
...
...
func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
self.parse(withData: data)
}
}
그래서, inputFrame
을 읽을 수있는 다른, 그냥 할 :
fileprivate func subscribeToEvents() {
self.stompStream.inputFrame
.observeOn(SerialDispatchQueueScheduler(queue: Queues().stompQueue, internalSerialQueueName: "stomp"))
.subscribe(onNext: { inputFrame in
//do some stuff
}).addDisposableTo(self.disposeBag)
}
I를 가입자가이 같은 들어오는 STOMP 프레임을 관찰 할 수 있도록 그래서, PublishSubject
를 사용하는 주요 클래스를 생성 RxSwift에 매우 익숙하고을 사용하는 것이 더 낫습니다. 이벤트를 읽는 것이 좋지만 PublishSubject를 사용하면 다음과 같이 초기화 할 수 있습니다 : PublishSubject<StompFrame>()
및 Observable<StompFrame>
어떻게해야하는지 이해할 수 없었습니다. 그런, 어떤을 창조하지 않고 func
, wher e 나는 Observable.create { }
을 반환 할 것이므로, 누군가가 이벤트를 받기를 원할 때마다 Observable<StompFrame>
을 만들지 만, PublishSubject
은 오직 하나뿐입니다. 나에게 코드가 무효 세계에 필수적에서 해소되어 있기 때문에이 수신 물건 :