1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/HarmonyOS-tpc-ReactiveNetwork

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
README.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.03.2025 15:16 3061585

РеактивнаяСеть

РеактивнаяСеть: РеактивнаяСеть — это библиотека OHOS, которая слушает состояние сетевого соединения и наличие интернет-соединения с помощью Observable RxJava. Она написана с использованием подхода реактивного программирования.

РеактивнаяСеть включает:

  • Наблюдение за сетевым соединением.
  • Проверка наличия интернет-соединения постоянно и/или один раз.
  • Поддержка пользовательского хоста с использованием собственной стратегии InternetObservingStrategy.
  • Поддержка цепочки событий сетевого и интернет-соединения.

Инструкции по использованию

Пример приложения требует следующих разрешений:

ohos.permission.INTERNET
ohos.permission.GET_NETWORK_INFO

Поддержка cleartextTraffic по умолчанию отключена для HTTP. Однако, HTTPS поддерживается по умолчанию. Чтобы поддерживать HTTP, необходимо добавить "network" в файл config.json и установить атрибут "cleartextTraffic" в значение true.

{
  "deviceConfig": {
    "default": {
      "network": {
        "cleartextTraffic": true
      }
    }
  }
}

Наблюдение за состоянием сети

Можно наблюдать за Connectivity с помощью метода observeNetworkConnectivity(context) следующим образом:

ReactiveNetwork
  .observeNetworkConnectivity(context)
  .subscribeOn(Schedulers.io())
  ... // что угодно еще, что можно сделать с RxJava
  .observeOn(HarmonySchedulers.mainThread())
  .subscribe(connectivity -> {
      // делайте что-то с connectivity
      // вы можете вызвать connectivity.getNetworkState();
      // или connectivity.getNetworkCapabilities();
  },
  throwable -> { /* обрабатывайте ошибку здесь */});
```Когда `Connectivity` меняется, подписчики будут уведомлены. `Connectivity` может менять своё состояние или тип.

**Ошибки** могут быть обработаны таким же образом, как и во всех Observable RxJava. Например:

ReactiveNetwork .observeNetworkConnectivity(context) .subscribeOn(Schedulers.io()) .observeOn(HarmonySchedulers.mainThread()) .subscribe( connectivity -> /* обрабатывайте connectivity здесь /, throwable -> / обрабатывайте ошибку здесь */ );


### Наблюдение за состоянием интернет-соединения

#### Наблюдение за состоянием интернет-соединения постоянно

Можно наблюдать за состоянием интернет-соединения постоянно следующим образом:

ReactiveNetwork .observeInternetConnectivity() .subscribeOn(Schedulers.io()) .observeOn(HarmonySchedulers.mainThread()) .subscribe(isConnectedToInternet -> { // делайте что-то с значением isConnectedToInternet }, throwable -> { /* обрабатывайте ошибку здесь */ });


Объект `Observable` вернёт `true` в подписке (disposing) если устройство подключено к Интернету и `false` если нет.

Проверка подключения к Интернету будет выполнена _по возможности как можно быстрее_.**Примечание:** Этот метод менее эффективен, чем метод `observeNetworkConnectivity(context)`, так как при использовании стандартной стратегии наблюдения он открывает сокетное соединение с удалённым хостом каждые две секунды с тайм-аутом в две секунды и потребляет трафик. Используйте этот метод, если это действительно необходимо. В качестве альтернативы вы можете отменить подписку (disposing) сразу после получения уведомления о доступности Интернета и выполнить необходимую работу, чтобы уменьшить количество сетевых запросов.Методы в этом разделе следует использовать, если они действительно необходимы из-за специфических случаев использования.

Если вы хотите настроить наблюдение за подключением к интернету, вы можете использовать класс `InternetObservingSettings` и его билдер.
Они позволяют настраивать интервал мониторинга в миллисекундах, хост, порт, таймаут, начальный интервал мониторинга, ожидаемый код ответа HTTP, обработчик ошибок или всю стратегию наблюдения.

```java
InternetObservingSettings settings = InternetObservingSettings.builder()
  .initialInterval(initialInterval)
  .interval(interval)
  .host(host)
  .port(port)
  .timeout(timeout)
  .httpResponse(httpResponse)
  .errorHandler(testErrorHandler)
  .strategy(strategy)
  .build();

ReactiveNetwork
  .observeInternetConnectivity(settings)
  .subscribeOn(Schedulers.io())
  .observeOn(HarmonySchedulers.mainThread())
  .subscribe(isConnectedToInternet -> {
      // что-то сделать с значением isConnectedToInternet
  },
  throwable    -> { /* обработать ошибку здесь */});

Эти методы созданы для того, чтобы позволить пользователям полностью настраивать библиотеку и предоставлять им больше контроля.

Примечание: не все параметры имеют значение для всех стратегий.

Проверка подключения к интернету один раз

Если мы не хотим наблюдать за подключением к интернету в интервале с помощью метода Observable<Boolean> observeInternetConnectivity(...), мы можем использовать метод Single<Boolean> checkInternetConnectivity(), который делает то же самое, но только один раз. Это может быть полезно в специальных случаях использования.``` Single single = ReactiveNetwork.checkInternetConnectivity();

single .subscribeOn(Schedulers.io()) .observeOn(HarmonySchedulers.mainThread()) .subscribe(isConnectedToInternet -> { // что делать с isConnectedToInternet }, throwable -> { /* обработайте ошибку здесь */} );


Как и в предыдущем случае, вы можете настроить эту функцию с помощью класса `InternetObservingSettings` и его билдера.

```java
InternetObservingSettings settings = InternetObservingSettings.builder()
  .initialInterval(initialInterval)
  .interval(interval)
  .host(host)
  .port(port)
  .timeout(timeout)
  .httpResponse(httpResponse)
  .errorHandler(testErrorHandler)
  .strategy(strategy)
  .build();

Single<Boolean> single = ReactiveNetwork.checkInternetConnectivity(settings);

single
  .subscribeOn(Schedulers.io())
  .observeOn(HarmonySchedulers.mainThread())
  .subscribe(isConnectedToInternet -> {
      // сделайте что-то с isConnectedToInternet
  },
  throwable    -> { /* обработайте ошибку здесь */} );

Основная идея та же самая. Единственное отличие — тип возвращаемого значения Single<Boolean> вместо Observable<Boolean>, и отсутствие параметров int initialIntervalInMs и int intervalInMs.

Как и раньше, эти методы созданы для того, чтобы позволить пользователям полностью настраивать библиотеку и иметь больше контроля над ней.

Стратегии наблюдения за интернет-соединением

Сейчас у нас есть следующие стратегии для наблюдения за соединением с Интернетом:

  • SocketInternetObservingStrategy — мониторинг соединения с Интернетом через открытие сокетного соединения с удалённым хостом
  • WalledGardenInternetObservingStrategy — открытие соединения с удалённым хостом и уважение стран в "стенах сада" (например, Китай) ```Все эти стратегии реализуют интерфейс NetworkObservingStrategy. По умолчанию используется стратегия `WalledGardenInternetObservingStrategy`, но с помощью методов `checkInternetConnectivity(strategy)` и `observeInternetConnectivity(strategy)` можно явно использовать одну из этих стратегий.

Настроечный хост

Если вам требуется пинговать специальный хост во время проверки соединения с Интернетом, рекомендуется использовать SocketInternetObservingStrategy. Вы можете сделать это следующим образом:

InternetObservingSettings settings = InternetObservingSettings.builder()
  .host("www.yourhost.com")
  .port(port)
  .strategy(new SocketInternetObservingStrategy())
  .build();

ReactiveNetwork
  .observeInternetConnectivity(settings)
  .subscribeOn(Schedulers.io())
  .observeOn(HarmonySchedulers.mainThread())
  .subscribe(isConnectedToHost -> {
      // сделайте что-то с isConnectedToHost
  },
  throwable    -> { /* обработайте ошибку здесь */ } );

Если вы хотите использовать WalledGardenInternetObservingStrategy, пожалуйста, обновите код ответа HTTP через InternetObservingSettings. Например, установите его значение в 200, так как по умолчанию используется 204.

То же действие можно выполнить с помощью метода checkInternetConnectivity(strategy, host), который возвращает Single вместо Observable.

Цепочка событий сети и интернет-соединений

Допустим, мы хотим реагировать на каждое изменение соединения сети и если мы подключаемся к сети, то проверить, подключена ли эта сеть к Интернету. Мы можем это сделать следующим образом:```
ReactiveNetwork .observeNetworkConnectivity(getApplicationContext()) .flatMapSingle(connectivity -> ReactiveNetwork.checkInternetConnectivity()) .subscribeOn(Schedulers.io()) .observeOn(HarmonySchedulers.mainThread()) .subscribe(isConnected -> { // isConnected может быть true или false }, throwable -> { /* Обработайте ошибку здесь */ } );


В случае, когда нам приходят слишком много событий, связанных с изменениями сети, или мы хотим игнорировать предыдущие наблюдатели (в данном примере только один), после того как они были подписаны, мы можем использовать оператор `switchMapSingle` вместо `flatMapSingle`, чтобы получать обновления только от последнего наблюдателя. В этом случае, это будет наблюдатель, созданный методом `checkInternetConnectivity`.

# Инструкции по установке

Библиотечные зависимости
    ReactiveNetwork зависит от rxohos.har, rxjava3 и gson.

1. Для использования модуля ReactiveNetwork в вашем образце приложения, добавьте нижеуказанную библиотечную зависимость для генерации hap/library.har.

	Измените entry build.gradle следующим образом:
	```
	dependencies {
	    implementation 'io.openharmony.tpc.thirdlib:Rxohos:1.0.0'
        implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
        implementation 'com.google.code.gson:gson:2.8.6'
        implementation project(path: ':library')
	}
	```

2. Для использования ReactiveNetwork в отдельном приложении, добавьте нижеуказанные зависимости и "library.har" в папку libs модуля "entry".
	Измените `entry` `build.gradle` следующим образом:
	```markdown
	dependencies {
		implementation fileTree(dir: 'libs', include: ['*.har'])
		implementation 'io.openharmony.tpc.thirdlib:Rxohos:1.0.0'
		implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
		implementation 'com.google.code.gson:gson:2.8.6'
	}
	```
	Для использования `ReactiveNetwork` из удалённого репозитория в отдельном приложении, добавьте следующие зависимости в `entry` `build.gradle`.	Измените entry build.gradle следующим образом:
	```
	dependencies {
		implementation 'io.openharmony.tpc.thirdlib:Rxohos:1.0.0'
		implementation 'io.openharmony.tpc.thirdlib:ReactiveNetwork:1.0.2'
		implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
		implementation 'com.google.code.gson:gson:2.8.6'
	}

Лицензия

Copyright 2016 Петра Витчена

Разрешено к использованию под лицензией Apache License, Версия 2.0 («Лицензия»); 
вы можете использовать этот файл только в соответствии с Лицензией. 
Вы можете получить копию Лицензии по адресу

   http://www.apache.org/licenses/LICENSE-2.0

Если применимое законодательство или письменное соглашение не требуют этого, программное обеспечение,
распространяемое под Лицензией, распространяется «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, явных или подразумеваемых. 
Смотрите Лицензию для конкретного языка, регламентирующего права и условия использования.

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/HarmonyOS-tpc-ReactiveNetwork.git
git@gitlife.ru:oschina-mirror/HarmonyOS-tpc-ReactiveNetwork.git
oschina-mirror
HarmonyOS-tpc-ReactiveNetwork
HarmonyOS-tpc-ReactiveNetwork
RxJava1.x