diff --git a/.gradle/7.1/executionHistory/executionHistory.bin b/.gradle/7.1/executionHistory/executionHistory.bin index e246eea..32fd432 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..e2955bb 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..9ff3452 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..a127730 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..8718b66 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..1f98ef4 100644 Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 5404067..b761426 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,6 +4,7 @@ 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/build/classes/kotlin/main/MainKt$main$1.class b/build/classes/kotlin/main/MainKt$main$1.class deleted file mode 100644 index ba22cad..0000000 Binary files a/build/classes/kotlin/main/MainKt$main$1.class and /dev/null differ diff --git a/build/classes/kotlin/main/MainKt$xMap$1.class b/build/classes/kotlin/main/MainKt$xMap$1.class index 50d7522..662c29a 100644 Binary files a/build/classes/kotlin/main/MainKt$xMap$1.class and b/build/classes/kotlin/main/MainKt$xMap$1.class differ diff --git a/build/classes/kotlin/main/MainKt.class b/build/classes/kotlin/main/MainKt.class index d599b28..90f3326 100644 Binary files a/build/classes/kotlin/main/MainKt.class and b/build/classes/kotlin/main/MainKt.class differ diff --git a/build/kotlin/compileKotlin/build-history.bin b/build/kotlin/compileKotlin/build-history.bin index df7eb46..dc781bd 100644 Binary files a/build/kotlin/compileKotlin/build-history.bin and b/build/kotlin/compileKotlin/build-history.bin differ diff --git a/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab b/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab index ca51aa2..e44f7d0 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab and b/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab differ diff --git a/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream index 7db0fd5..655bc34 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream and b/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream differ diff --git a/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at index 033396e..978768c 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at and b/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab index 766caec..423b077 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream index 9cee24e..0622bf1 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len index 2ea7305..4e6ef51 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len index ec8f944..817b326 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at index 4c58386..d415df3 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i index 8f37b2c..c69b8ce 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab index bd9de50..83d73a2 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.values.at index b7684fc..81c405d 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.values.at and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.values.at differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab index ae2ad95..cc51c20 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at index 35c5c24..e9f6f8d 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab index dd98556..465aabc 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream index 7db0fd5..655bc34 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream differ diff --git a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at index 67f9ba1..26d10e9 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at and b/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab b/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab index 6540a14..ede6149 100644 --- a/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab +++ b/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab @@ -1,2 +1,2 @@ -14 -13 \ No newline at end of file +24 +23 \ No newline at end of file diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab index 212bada..bef3c5d 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab and b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream index 7db0fd5..655bc34 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream and b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at index add5894..3cc261a 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at and b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i index 3608bf1..0e0d105 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i and b/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab index a2be1bd..b8548fa 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab and b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream index bf06e37..3a764f1 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream and b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len index 46715fa..e534549 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len and b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len index 003bc0e..6a294aa 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len and b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at index 78dd910..7ceb190 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at and b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i index a131b89..14c8c8e 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i and b/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab index c5032e0..79a0e6b 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab and b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream index aaeb9c3..b654481 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream and b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len index 7e2aa70..524efa9 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len and b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len index 6f92777..2c16e3d 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len and b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values index a18f7d2..22512a2 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values and b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at index 52e2d18..16124a4 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at and b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at differ diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.s b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.s index c13278a..9cebaac 100644 --- a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.s +++ b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.s @@ -1 +1 @@ -( \ No newline at end of file + \ No newline at end of file diff --git a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i index 45d0072..f521941 100644 Binary files a/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i and b/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i differ diff --git a/build/kotlin/compileKotlin/last-build.bin b/build/kotlin/compileKotlin/last-build.bin index cc93e42..d00011f 100644 Binary files a/build/kotlin/compileKotlin/last-build.bin and b/build/kotlin/compileKotlin/last-build.bin differ diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index 18c0de6..6c9c024 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,8 +1,10 @@ import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Maybe +import io.reactivex.rxjava3.core.Single import java.rmi.server.ServerNotActiveException import java.util.* +import java.util.concurrent.Callable import java.util.concurrent.TimeUnit import kotlin.random.Random @@ -20,51 +22,238 @@ fun main() { // // Несмотря на то, что в некоторых заданиях фигурируют слова "синхронный" и "асинхронный" в рамках текущего ДЗ // это всего лишь имитация, реальное переключение между потоками будет рассмотрено на следующем семинаре + // - Сделал два варианта написания фунций - 1ый вариант - оканчивается на суффикс 2 - здесь функции заточены + // для применения в соответствующих излучателях + // - 2ой вариант - соответствующие излучатели вставлены в сами функции + // - 4 вопрос вызов ф-ции хотел закомментарить - потом передумал - вероятно так удобнее будет проверять? + // + + + println("Start Q1"); +/* + val count = -1 + require(count >= 0) { println("Count must be non-negative, was $count") } + require(requestServerAsync() !is Unit) { println("kuku") } + //println("require(requestServerAsync() is Unit)"+require(requestServerAsync() is Unit)); +*/ + Maybe.fromCallable( { + var result: ByteArray? = requestDataFromServerAsync2() + // val result: = ""; + result + }).blockingSubscribe( + {s : ByteArray? -> println("2Item received: from Maybe"+s.contentToString()); }, + { obj: Throwable -> obj.printStackTrace() } ) + { println("2Done from MaybeSource") } + + requestDataFromServerAsync().blockingSubscribe( + {s : ByteArray? -> println("Item received: from Maybe"+s.contentToString()); }, + { obj: Throwable -> obj.printStackTrace() } ) + { println("Done from MaybeSource") } + + println("Finished Q1"); + + println("Start Q2"); + Completable.fromCallable ( object: Callable { + override fun call(): Unit { requestServerAsync2()}} ). + subscribe({println("2Successful");}, + { obj: Throwable -> obj.printStackTrace() } ); + + requestServerAsync().subscribe({println("Successful");}, + { obj: Throwable -> obj.printStackTrace() } ); + println("Finished Q2"); + + println("Start Q3"); + Single.fromCallable ({ + var result: Int? = requestDataFromDbAsync2() + result + } + ).onErrorComplete{throwable : Throwable -> throwable is NullPointerException}. + blockingSubscribe({println("2S_Item received: from Single:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("2S_Item received: from Single:null")}); + + requestDataFromDbAsyncSingle().onErrorComplete{throwable : Throwable -> throwable is NullPointerException}. + blockingSubscribe({println("Item received: from Single:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("Item received: from Single:null")}); + +/// + Maybe.fromCallable ({ + var result: Int? = requestDataFromDbAsync2() + result + } + ).blockingSubscribe({println("2M_Item received: from Maybe:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("2M_Item received: from Maybe: null")}); + + requestDataFromDbAsync().blockingSubscribe({println("Any? -Item received: from Maybe:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("Any? Item received: from Maybe: null")}); + // Конкретный тип + requestDataFromDbAsync().blockingSubscribe({println("Int?Item received: from Maybe:$it")}, { obj: Throwable -> obj.printStackTrace() },{println("Int? Item received: from Maybe: null")}); + + println("Finish Q3"); + + println("Start Q4"); + emitEachSecond(); + println("Finish Q4"); + + println("Start Q5"); + xMap { flatMapCompletable(it) } + xMap { concatMapCompletable (it) } + xMap { switchMapCompletable(it) } + println("Finish Q5"); + + } + + // 1) Какой источник лучше всего подойдёт для запроса на сервер, который возвращает результат? +// Maybe - ну результат он возвращает(испускает более правильно в этом паттерне) .. +// ну и null в отличии от Single допускает... +// Можно использовать Observable - но он как бы depricated ? ибо - MissingBackpressureException или OutOfMemoryError +// но согласно спекам (*) - он подходит на все случаи +/*В RxJava есть три специализированных источника, представляющих собой подмножество Observable. +(Single Completable Maybe) +Третий тип — Maybe. +Он может либо содержать элемент, либо выдать ошибку, либо не содержать данных — этакий реактивный Optional. +*/ // Почему? +// Согласно лекции номер 2 +//Он может либо содержать элемент, либо выдать ошибку, либо не содержать данных — этакий реактивный Optional. // Дописать функцию -fun requestDataFromServerAsync() /* -> ??? */ { - +fun requestDataFromServerAsync2() : ByteArray? /* -> ??? */ { // Функция имитирует синхронный запрос на сервер, возвращающий результат fun getDataFromServerSync(): ByteArray? { Thread.sleep(LATENCY); val success = Random.nextBoolean() return if (success) Random.nextBytes(RESPONSE_LENGTH) else null + //return Random.nextBytes(RESPONSE_LENGTH) + } + return getDataFromServerSync() + /* return ??? */ +} + +fun requestDataFromServerAsync() : Maybe /* ByteArray? *//* -> ??? */ { + // Функция имитирует синхронный запрос на сервер, возвращающий результат + fun getDataFromServerSync(): ByteArray? { + Thread.sleep(LATENCY); + val success = Random.nextBoolean() + return if (success) Random.nextBytes(RESPONSE_LENGTH) else null + //return Random.nextBytes(RESPONSE_LENGTH) + } + return Maybe.fromCallable { getDataFromServerSync() } /* return ??? */ } // 2) Какой источник лучше всего подойдёт для запроса на сервер, который НЕ возвращает результат? +//Completable // Почему? +// По определению ..- заточен на какое то действие без возврата результата - а ля типа procedure vs function +// по реализации - можно завернуть иксепшен что бы не делать сверху генерации ошибки - ну если это надо. +//Он похож на void-метод. +//Он либо успешно завершает свою работу без каких-либо данных, либо бросает исключение. +//То есть это некий кусок кода, который можно запустить, и он либо успешно выполнится, либо завершится сбоем. // Дописать функцию -fun requestServerAsync() /* -> ??? */ { +fun requestServerAsync2() :Unit /* -> ??? */ { // Функция имитирует синхронный запрос на сервер, не возвращающий результат fun getDataFromServerSync() { Thread.sleep(LATENCY) if (Random.nextBoolean()) throw ServerNotActiveException() } - + return getDataFromServerSync() /* return ??? */ } +fun requestServerAsync() : Completable /*Unit*//* -> ??? */ { + // Функция имитирует синхронный запрос на сервер, не возвращающий результат + fun getDataFromServerSync() { + Thread.sleep(LATENCY) + if (Random.nextBoolean()) throw ServerNotActiveException() + } + return Completable.fromCallable { getDataFromServerSync() } + + /* return ??? */ +} // 3) Какой источник лучше всего подойдёт для однократного асинхронного возвращения значения из базы данных? +// Можно конечно использовать Maybe- Но неуверен насчет однократного ? (возвращает null в отличии Single ) НО +// Single согласно документации одно "испускание" делает. +//Он либо содержит один элемент, либо выдаёт ошибку, +//так что это не столько последовательность элементов, +//сколько потенциально асинхронный источник одиночного элемента. +//Можете представлять его себе как обычный метод. +//Вы вызываете метод и получаете возвращаемое значение; либо метод бросает исключение. +// Только вот как при проброске исключения сделать что бы Single возвращал значение. +// - соответственно через обработчик ошибки +// на null - обойдем это +// Сделал и так и этак - см. выше // Почему? +// Больше склоняюсь к maybe - ибо - может либо содержать элемент, либо выдать ошибку, либо не содержать данных +// — этакий реактивный Optional. - но в условиях сказано что для однократного - это смущает - и пишете +// что ф-ция - не возвращающий результата - ? - и как интепретировать возврат null - функция все же +// что возвращает значение null ? + +// Непонятки - как такое может быть - Функция имитирует синхронный запрос к БД не возвращающий результата +// - подойдёт для однократного асинхронного возвращения значения из базы данных? + +fun requestDataFromDbAsync1() /* -> ??? */ { + // Функция имитирует синхронный запрос к БД не возвращающий результата + fun getDataFromDbSync(): T? { + Thread.sleep(LATENCY); return null + } + //NullPointerException + /* return */ + return Maybe.fromCallable { getDataFromDbSync() } + .blockingSubscribe( + { println(":"+it) }, { println("database request error") }, { println("database request complete") }) +} + // Дописать функцию -fun requestDataFromDbAsync() /* -> ??? */ { +fun requestDataFromDbAsync2() : T? /* -> ??? */ { + + // Функция имитирует синхронный запрос к БД не возвращающий результата + fun getDataFromDbSync(): T? { + //val s : Int? = 1 + Thread.sleep(LATENCY); return null + } + return getDataFromDbSync() + + /* return */ +} + +fun requestDataFromDbAsync() : Maybe /* -> ??? */ { // Функция имитирует синхронный запрос к БД не возвращающий результата fun getDataFromDbSync(): T? { + //val s : Int? = 1 Thread.sleep(LATENCY); return null } + return Maybe.fromCallable {getDataFromDbSync()} /* return */ } +fun requestDataFromDbAsyncSingle() : Single /* -> ??? */ { + // Функция имитирует синхронный запрос к БД не возвращающий результата + fun getDataFromDbSync(): T? { + //val s : Int? = 1 + Thread.sleep(LATENCY); return null + } + return Single.fromCallable {getDataFromDbSync()} + + /* return */ +} + + +// Дописать функцию +fun requestDataFromDbAsync7() : Int? /* -> ??? */ { + + // Функция имитирует синхронный запрос к БД не возвращающий результата + fun getDataFromDbSync(): Int? { + //val s : Int? = 1 + Thread.sleep(LATENCY); return null + } + return getDataFromDbSync() + + /* return */ +} // 4) Примените к источнику оператор (несколько операторов), которые приведут к тому, чтобы элемент из источника // отправлялся раз в секунду (оригинальный источник делает это в 2 раза чаще). // Значения должны идти последовательно (0, 1, 2 ...) @@ -76,7 +265,7 @@ fun emitEachSecond() { // Принтер fun printer(value: Long) = println("${Date()}: value = $value") - + source().doOnEach { Thread.sleep(2000L)}.blockingSubscribe({printer(it)}) // code here } @@ -92,8 +281,16 @@ fun emitEachSecond() { // Вызов осуществлять поочерёдно из функции main // // xMap { flatMapCompletable(it) } +// возвращает (emit?) результат чисто внешне в рандомном порядке +// в терминологии этого паттерна - генерит один стрим(несколько) и маппиться напрямую в конечный стрим без гарантии сохранения порядка // xMap { concatMapCompletable (it) } +// возвращает (emit?) результат чисто внешне в отсортированном по возрастании порядке +// в терминологии этого паттерна - генерит один стрим(несколько) и маппиться напрямую в конечный стрим сохраняя порядок // xMap { switchMapCompletable(it) } +// возвращает (emit?) результат чисто внешне обрезает и отдает крайний результат +// в терминологии этого паттерна(не уверен) - генерит один стрим(несколько) элементв видно не пропускаються и маппиться крайний элемент по порядку. +// Говорят нужно например при вводе символов .... +// // fun xMap(mapper: Flowable.(internalMapper: (Int) -> Completable) -> Completable) {