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..95f6621 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,202 @@ fun main() {
//
// Несмотря на то, что в некоторых заданиях фигурируют слова "синхронный" и "асинхронный" в рамках текущего ДЗ
// это всего лишь имитация, реальное переключение между потоками будет рассмотрено на следующем семинаре
+ // - Сделал два варианта написания фунций - 1ый вариант - оканчивается на суффикс 2 - здесь функции заточены
+ // для применения в соответствующих излучателях
+ // - 2ой вариант - соответствующие излучатели вставлены в сами функции
+ // - 4 вопрос вызов ф-ции хотел закомментарить - потом передумал - вероятно так удобнее будет проверять?
+ //
+
+
+ println("Start Q1");
+ Maybe.fromCallable {
+ var result: ByteArray? = requestDataFromServerAsync2()
+ 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
// Дописать функцию
-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 getDataFromServerSync()
+ /* return ??? */
+}
+
+fun requestDataFromServerAsync() : Maybe /* -> ??? */ {
+ // Функция имитирует синхронный запрос на сервер, возвращающий результат
+ fun getDataFromServerSync(): ByteArray? {
+ Thread.sleep(LATENCY);
+ val success = Random.nextBoolean()
+ return if (success) Random.nextBytes(RESPONSE_LENGTH) else null
+ }
+ return Maybe.fromCallable { getDataFromServerSync() }
/* return ??? */
}
// 2) Какой источник лучше всего подойдёт для запроса на сервер, который НЕ возвращает результат?
+//Completable
// Почему?
+// По определению ..- заточен на какое то действие без возврата результата - а ля типа procedure(void-метод) vs function
+// Он либо успешно завершает свою работу без каких-либо данных, либо бросает исключение.
+// То есть это некий кусок кода, который можно запустить, и он либо успешно выполнится, либо завершится сбоем.
+// по реализации - можно завернуть иксепшен что бы не делать сверху генерации ошибки - ну если это надо.
// Дописать функцию
-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 - ибо - может либо содержать элемент, либо выдать ошибку, либо не содержать данных
+// Хотя...(непонятки) - а как такое может быть ? - Функция имитирует синхронный запрос к БД не возвращающий результата
+// а в условиях задачи сказано что - подойдёт для однократного асинхронного возвращения значения из базы данных
+// хотя в принципе он(Single) и подходит - а вот если засунут этот "шлямбур" с null -
+// он выдаст ошибку - ибо просто ждет возвращаемого значения из бд
+
+
// Дописать функцию
-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? {
+ 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 +229,7 @@ fun emitEachSecond() {
// Принтер
fun printer(value: Long) = println("${Date()}: value = $value")
-
+ source().doOnEach { Thread.sleep(2000L)}.blockingSubscribe({printer(it)})
// code here
}
@@ -92,8 +245,16 @@ fun emitEachSecond() {
// Вызов осуществлять поочерёдно из функции main
//
// xMap { flatMapCompletable(it) }
+// возвращает (emit?) результат чисто внешне в рандомном порядке
+// в терминологии этого паттерна - генерит один стрим(несколько) и маппиться напрямую в конечный стрим без гарантии сохранения порядка
// xMap { concatMapCompletable (it) }
+// возвращает (emit?) результат чисто внешне в отсортированном по возрастании порядке
+// в терминологии этого паттерна - генерит один стрим(несколько) и маппиться напрямую в конечный стрим сохраняя порядок
// xMap { switchMapCompletable(it) }
+// возвращает (emit?) результат чисто внешне обрезает и отдает крайний результат
+// в терминологии этого паттерна(не уверен) - генерит один стрим(несколько) элементв видно не пропускаються и маппиться крайний элемент по порядку.
+// Говорят нужно например при вводе символов ....
+//
//
fun xMap(mapper: Flowable.(internalMapper: (Int) -> Completable) -> Completable) {