     return self.streamSubject.asObservable()
   }
 
+  var scheduler: SerialDispatchQueueScheduler
+  var queue = DispatchQueue(label: "com.qvacua.NvimView.UiBridge", qos: .userInitiated) {
+    didSet {
+      self.scheduler = SerialDispatchQueueScheduler(queue: self.queue,
+                                                    internalSerialQueueName: "com.qvacua.NvimView.UiBridge")
+    }
+  }
+
   let nvimQuitCondition = NSCondition()
 
   private(set) var isNvimQuitting = false

  private var nvimServerProc: Process?

  private var isNvimReady = false
  private let nvimReadyCondition = NSCondition()
  private var isInitErrorPresent = false

  private var initialWidth = 40
  private var initialHeight = 20

  private let streamSubject = PublishSubject<Message>()
  private let disposeBag = DisposeBag()

        .disposed(by: self.disposeBag)

    case .nvimReady:
      self.isNvimReady = true

      self.runLocalServerAndNvimCompletable?(.completed)
      self.runLocalServerAndNvimCompletable = nil

      self.streamSubject.onNext(.ready)

      let isInitErrorPresent = data?.asArray(ofType: Bool.self, count: 1)?[0] ?? false
      if isInitErrorPresent {
        self.streamSubject.onNext(.initVimError)
      }

    case .resize:
