diff --git a/.gradle/7.1/executionHistory/executionHistory.bin b/.gradle/7.1/executionHistory/executionHistory.bin
index e246eea..ad997ac 100644
Binary files a/.gradle/7.1/executionHistory/executionHistory.bin and b/.gradle/7.1/executionHistory/executionHistory.bin differ
diff --git a/.gradle/7.1/executionHistory/executionHistory.lock b/.gradle/7.1/executionHistory/executionHistory.lock
index c4f0e4a..c6e4057 100644
Binary files a/.gradle/7.1/executionHistory/executionHistory.lock and b/.gradle/7.1/executionHistory/executionHistory.lock differ
diff --git a/.gradle/7.1/fileHashes/fileHashes.bin b/.gradle/7.1/fileHashes/fileHashes.bin
index 8f6ab44..d4701e1 100644
Binary files a/.gradle/7.1/fileHashes/fileHashes.bin and b/.gradle/7.1/fileHashes/fileHashes.bin differ
diff --git a/.gradle/7.1/fileHashes/fileHashes.lock b/.gradle/7.1/fileHashes/fileHashes.lock
index 02e1216..cfbcc8e 100644
Binary files a/.gradle/7.1/fileHashes/fileHashes.lock and b/.gradle/7.1/fileHashes/fileHashes.lock differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 25617e1..93197b7 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
index 177c456..6d716d4 100644
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..797acea
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt
index 18c0de6..b62712d 100644
--- a/src/main/kotlin/Main.kt
+++ b/src/main/kotlin/Main.kt
@@ -1,6 +1,5 @@
-import io.reactivex.rxjava3.core.Completable
-import io.reactivex.rxjava3.core.Flowable
-import io.reactivex.rxjava3.core.Maybe
+import io.reactivex.rxjava3.annotations.NonNull
+import io.reactivex.rxjava3.core.*
import java.rmi.server.ServerNotActiveException
import java.util.*
import java.util.concurrent.TimeUnit
@@ -20,49 +19,97 @@ fun main() {
//
// Несмотря на то, что в некоторых заданиях фигурируют слова "синхронный" и "асинхронный" в рамках текущего ДЗ
// это всего лишь имитация, реальное переключение между потоками будет рассмотрено на следующем семинаре
+
+ println("1")
+ requestDataFromServerAsync()
+ .blockingSubscribe(
+ {
+ println(it)
+ },
+ {
+ println(it.message)
+ }
+ )
+ println("---------")
+ println("2")
+ requestServerAsync()
+ .blockingSubscribe(
+ {
+ println("success")
+ },
+ {
+ println(it.message)
+ }
+ )
+ println("---------")
+ println("3")
+ requestDataFromDbAsync()
+ .blockingSubscribe(
+ {
+ println("success")
+ println(it)
+ },
+ {
+ println(it.message)
+ },
+ {
+ println("complete")
+ }
+ )
+ println("---------")
+ println("4")
+ emitEachSecond()
+
+
+ //xMap { flatMapCompletable(it) }
+ //xMap { concatMapCompletable (it) }
+ //xMap { switchMapCompletable(it) }
}
// 1) Какой источник лучше всего подойдёт для запроса на сервер, который возвращает результат?
// Почему?
// Дописать функцию
-fun requestDataFromServerAsync() /* -> ??? */ {
+fun requestDataFromServerAsync(): Single /* -> ??? */ {
// Функция имитирует синхронный запрос на сервер, возвращающий результат
fun getDataFromServerSync(): ByteArray? {
- Thread.sleep(LATENCY);
+ Thread.sleep(LATENCY)
val success = Random.nextBoolean()
return if (success) Random.nextBytes(RESPONSE_LENGTH) else null
}
- /* return ??? */
+
+ return Single.fromCallable { getDataFromServerSync() }
+
}
// 2) Какой источник лучше всего подойдёт для запроса на сервер, который НЕ возвращает результат?
-// Почему?
+// Почему? Completable т.к. важено только выплнение запроса а не результат
// Дописать функцию
-fun requestServerAsync() /* -> ??? */ {
+fun requestServerAsync(): Completable /* -> ??? */ {
// Функция имитирует синхронный запрос на сервер, не возвращающий результат
fun getDataFromServerSync() {
Thread.sleep(LATENCY)
if (Random.nextBoolean()) throw ServerNotActiveException()
}
+ return Completable.fromAction { getDataFromServerSync() }
- /* return ??? */
}
// 3) Какой источник лучше всего подойдёт для однократного асинхронного возвращения значения из базы данных?
-// Почему?
+// Почему? Maybe т.к. из бд можно получить null
// Дописать функцию
-fun requestDataFromDbAsync() /* -> ??? */ {
+fun requestDataFromDbAsync(): Maybe /* -> ??? */ {
// Функция имитирует синхронный запрос к БД не возвращающий результата
fun getDataFromDbSync(): T? {
Thread.sleep(LATENCY); return null
}
- /* return */
+ return Maybe.fromCallable { getDataFromDbSync() }
+
}
// 4) Примените к источнику оператор (несколько операторов), которые приведут к тому, чтобы элемент из источника
@@ -77,7 +124,8 @@ fun emitEachSecond() {
// Принтер
fun printer(value: Long) = println("${Date()}: value = $value")
- // code here
+ source().filter { it % 2 == 0L }.map { it / 2 }
+ .blockingSubscribe(::printer)
}
// 5) Функция для изучения разницы между операторами concatMap, flatMap, switchMap