RXKOTLIN/RXJAVA: Связь между сокетом с использованием наблюдаемых

#android #rx-java #rxjs-observables #rx-kotlin

Вопрос:

Я новичок в RxKotlin/RxJava. Я разрабатываю фоновый сервис в Android.

На моей службе у меня есть

  • Разъем Bluetooth
  • TCP-сокет

Всякий раз, когда данные доступны в сокете Bluetooth, считывайте и записывайте их в сокет TCP. И всякий раз, когда данные поступают в TCP-сокет, записывайте их в разъем Bluetooth.

Кто-нибудь может мне помочь:

  • как добиться этого с помощью наблюдаемых объектов?
  • как обмениваться информацией об идентификаторе сокета?
  • как обмениваться данными? Спасибо

Комментарии:

1. Вы знаете, как все это сделать без RxJava ?

2. Мы можем достичь этого с помощью обработчика потока, управляемого, циклического, очереди сообщений. Но это огромная работа

Ответ №1:

Пожалуйста, попробуйте использовать RxSubjects (https://blog.mindorks.com/understanding-rxjava-subject-publish-replay-behavior-and-async-subject-224d663d452f)

Позвольте мне привести здесь в качестве примера объект публикации.

 //a publish subject which publishes int values
public PublishSubject<Integer> source = PublishSubject.create();
source.onNext(1);
source.onNext(2);
 

Таким образом, приведенные выше строки кода относятся к классу сокетов Bluetooth.

Теперь в классе сокетов TCP, используя исходный код, вы можете наблюдать здесь.

 source
    .subscribe(
        {
           //result
        },
        {
           //error
        }
    )
 

Вот и все.

Пожалуйста, убедитесь, что подписка происходит до того, как гнездо Bluetooth начнет публиковать данные.

Комментарии:

1. Большое спасибо. Теперь все ясно с передачей данных из класса Bluetooth в класс TCP. Чтобы перенести обратно другие наборы данных из класса TCP в класс Bluetooth, нам нужно создать наблюдаемый в классе TCP и наблюдатель в классе Bluetooth. Правильно ли я понимаю? Спасибо

2. ДА. Такой подход сработал бы. Также, если вы думаете, что этот ответ работает для вас, пожалуйста, примите его. Счастливое кодирование

3. Я искал пример, используя Publishsubject между классами. Не могли бы вы поделиться одним примером, если это возможно. Спасибо

4. Это что-то похожее на использование livedata внутри viewmodel и представления. Определите субъект в одном классе и получите доступ к его объекту из другого.