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

OSCHINA-MIRROR/HarmonyOS-tpc-ReactiveNetwork

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ReactiveNetwork

ReactiveNetwork — это библиотека OHOS, которая отслеживает состояние сетевого подключения и подключение к интернету с помощью RxJava Observables. Она написана с использованием подхода реактивного программирования.

Возможности ReactiveNetwork:

  1. Отслеживание состояния подключения к сети.
  2. Непрерывная или однократная проверка подключения к интернету.
  3. Поддержка пользовательского хоста с использованием собственной стратегии наблюдения за интернетом.
  4. Поддержка объединения потоков подключения к сети и интернету.

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

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

ohos.permission.INTERNET
ohos.permission.GET_NETWORK_INFO

По умолчанию поддержка открытого текста в 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.getNetworkState();
      // или connectivity.getNetworkCapabilities();
  },
  throwable    -> { /* обрабатываем ошибку здесь */} );

Когда Connectivity изменяется, подписчик будет уведомлён. Connectivity может изменить своё состояние или тип.

Ошибки обрабатываются так же, как и во всех наблюдаемых объектах RxJava. Например:

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

Наблюдение за подключением к интернету

Непрерывное наблюдение за подключением к интернету

Мы можем непрерывно отслеживать подключение к интернету следующим образом:

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

Observable вернёт true подписке (disposable), если устройство подключено к интернету, и false, если нет.

Подключение к интернету будет проверяться как можно скорее.

Обратите внимание: этот метод менее эффективен, чем метод observeNetworkConnectivity(context), потому что в стратегии наблюдения по умолчанию он открывает соединение сокета с удаленным хостом каждые две секунды с двухсекундным таймаутом и использует передачу данных. Используйте этот метод, если он вам действительно нужен. При желании вы можете отказаться от подписки (disposable) сразу после получения уведомления о том, что интернет доступен, и выполнить работу, которую вы хотите, чтобы уменьшить количество сетевых вызовов.

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

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

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<Boolean> single = ReactiveNetwork.checkInternetConnectivity();

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

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

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 -> {
      // сделать что-то с isConnectedToTheInternet
  },
  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    -> { /* обработать ошибку здесь */} ););

В случае если мы получаем слишком много событий, связанных с изменениями сети, или мы... Использование библиотеки ReactiveNetwork

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

Зависимости библиотеки ReactiveNetwork зависит от rxohos.har, rxjava3 и gson.

  1. Чтобы использовать модуль ReactiveNetwork в своём примере приложения, добавьте следующую зависимость библиотеки для создания hap/library.har.

    Измените файл 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».

    Измените файл build.gradle на уровне входа следующим образом:

    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'
    }
  3. Чтобы использовать ReactiveNetwork из удалённого репозитория в отдельном приложении, добавьте следующие зависимости в файл 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 Piotr Wittchen

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

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

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

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

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

Введение

Описание недоступно Расширить Свернуть
Java
Apache-2.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