From 184d7890b89a1a0964535c81c49f997ff46f51c7 Mon Sep 17 00:00:00 2001 From: gleb molotkov Date: Fri, 25 Mar 2022 14:57:13 +0300 Subject: [PATCH 1/2] first my step --- .idea/RxJavaHomework.iml | 9 +++++++++ .idea/modules.xml | 8 ++++++++ .idea/vcs.xml | 6 ++++++ src/main/kotlin/Main.kt | 2 ++ 4 files changed, 25 insertions(+) create mode 100644 .idea/RxJavaHomework.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/RxJavaHomework.iml b/.idea/RxJavaHomework.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/RxJavaHomework.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9a8d673 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ 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..bd19f96 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -37,6 +37,8 @@ fun requestDataFromServerAsync() /* -> ??? */ { /* return ??? */ } +//--Опля ))) + // 2) Какой источник лучше всего подойдёт для запроса на сервер, который НЕ возвращает результат? // Почему? From a7e08ada592146c1e42b5b304a701143be6e48f4 Mon Sep 17 00:00:00 2001 From: gleb molotkov Date: Fri, 25 Mar 2022 15:22:05 +0300 Subject: [PATCH 2/2] first my step --- .../7.1/executionHistory/executionHistory.bin | Bin 41317 -> 41317 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/7.1/fileHashes/fileHashes.bin | Bin 22397 -> 22597 bytes .gradle/7.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 20549 -> 20747 bytes .idea/RxJavaHomework.iml | 9 -- .idea/modules.xml | 8 -- src/main/kotlin/Main.kt | 124 ++++++++++++++++-- 9 files changed, 114 insertions(+), 27 deletions(-) delete mode 100644 .idea/RxJavaHomework.iml delete mode 100644 .idea/modules.xml diff --git a/.gradle/7.1/executionHistory/executionHistory.bin b/.gradle/7.1/executionHistory/executionHistory.bin index e246eeaf83dbdade5e626a69662ac38ea87d283e..11c64f47344143ade21c52b0ea4712582a4c446c 100644 GIT binary patch delta 395 zcmaEQi0SDerVTk=Dt5E8Gg6Go%Zg0R^OEw@vduHna}%p7jH^;pD;dCmDPnS=$65oE zR0GS@w4~&eBvS)Z!?ff?OEYt`L?AoW#KI!YP~fN0>98Bej06t6Gn&Ma5t;#<8HlC9xzi#wR~HF()P@HMbz9yeP52+|bO>%pxa0Ic9P~udMUT zoe$gp=Bvefa?8v~Wjw@4syW@>Dy(O>0?nEHzgN`oB+2^Mc51tx0qNI2!N}5G uoLrPyPy%+!c2Zqp*d@vLV>`&C|2iy;3=AyZlNr0TC!g!(+x()hRtNxj*p}x2 delta 223 zcmaEQi0SDerVTk=Dl=v$r(_poWTu*wRwbI3Wt19aBo-J~7G;^{moh+r#^geeHHL|% zDW;YwsVU}3NycX8hG`~dMk$FYDMsd|$!SSxNhSjE_IEZK>-cHMHX5FpQe4!vdA{!& zM#hVi9Rutp-|FL^Jk4KBc=D8oT|f2rh_ZBKB^J45=A<&-fXeet<_M6J{xBINKj9)X xOMgL8enDzcNoHy>SlxZNx~>3KvG-tgCm30}i<65o3rfIB&VrO|zSY+)1OOqbSl0jm diff --git a/.gradle/7.1/executionHistory/executionHistory.lock b/.gradle/7.1/executionHistory/executionHistory.lock index c4f0e4ad93104cda4c39a11f52b8d8a6113aa841..21c2eab4ffe92664800b86545bf96d8225a4e95b 100644 GIT binary patch literal 17 UcmZS9`N_Ly!%{Y51_)>c04=}-1poj5 literal 17 UcmZS9`N_Ly!%{Y51_)>Z04==)0ssI2 diff --git a/.gradle/7.1/fileHashes/fileHashes.bin b/.gradle/7.1/fileHashes/fileHashes.bin index 8f6ab440cea638441e4be4cb1c7d02e0fa1d8fde..75651644c0bd072aebd022fd7fa3ddec0f5fbcb4 100644 GIT binary patch delta 164 zcmeynj`8RQ#tkMCj6s`CB{Y}>ZhyD>IR7-aG6NVy2yYIRTEHlvxN-UN_Ipw1A)?_A zC%=_e5YQA>3|rD2?*SEDznN7=k(u9EO{An)vIHtvJ6Tq~nDO97#UJ7u4I%_KJ9^mg rPmT>yVma_5X69slPdy+b>g?o12;bsCrflO-G&vsD}!1CxdyY5`%fA@~=uFt`x2 HK}b9gu{991 diff --git a/.gradle/7.1/fileHashes/fileHashes.lock b/.gradle/7.1/fileHashes/fileHashes.lock index 02e1216ab52faf219280fc90fb647e7573f99b81..5b1d44b8efb4bc07db1dd1491ff04c2070893aa6 100644 GIT binary patch literal 17 UcmZR6%oy0<*XuHi0Rk=n04xdwLI3~& literal 17 UcmZR6%oy0<*XuHi0Rm0|04xLqJOBUy diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 25617e132aae00625fd44a7ff59f8413df23c880..e8263cd1153bf1fcdfb339562506702c843ba41d 100644 GIT binary patch literal 17 UcmZQRgVEE*zGA9JMr5*{bU71q~72G&ERCb1d z;>P96+wVo4hYCKQ{8ZMGUsy40Nq4*lRP5?xQMmvCgO~5>*WLDB0~M^^94mK&Ng&1P z0sjZ37ZaeO^C#;nKIA{mv3}o|@A6Qw!;@K+GWm_wL`sS!OQ2$|lT($tn7B`FRQw^n Z(I9|lv!e$K$K-r3!^sIAQIie4tpNx*RMr3h delta 77 zcmV-T0J8s!q5;LA0kAX}0dli780Z3%H5;gt^&63so*YM${T#rP)g6$NeI7BB#vVtr jB_GfNlMN!-ll~%LlXfG40t&&gA@~=uFjx( - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 9a8d673..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index bd19f96..b933ddd 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,50 +22,152 @@ fun main() { // // Несмотря на то, что в некоторых заданиях фигурируют слова "синхронный" и "асинхронный" в рамках текущего ДЗ // это всего лишь имитация, реальное переключение между потоками будет рассмотрено на следующем семинаре + + println("Start Q1"); + + //Single.timer(1L,TimeUnit.MILLISECONDS).blockingSubscribe({println("0")},{println("error")}); + //Some Emission + //Some Emission + //val singleSource = Maybe.just("single item"); + /// maybe_array = Maybe.fromCallable ( {requestDataFromServerAsync();} ); +/* + 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( { + // val arr: Array = arrayOfNulls(1); + //val arr: ByteArray? = arrayOfNulls(1) + // don't know standart fun like arrayOfNulls for List + // var result: MutableList = arr.toMutableList(); //arrayListOf(list.size); + var result: ByteArray? = requestDataFromServerAsync() + // val result: = ""; + result + }).blockingSubscribe({s : ByteArray? -> println("Item received: from Maybe"+s.contentToString()); + }, + { obj: Throwable -> obj.printStackTrace() } ) { println("Done from MaybeSource") } + + + + /* singleSource.subscribe( + { s: String -> println("Item received: from singleSource $s") }, + { obj: Throwable -> obj.printStackTrace() } + ) { println("Done from SingleSource") } + */ + + + // Maybe maybe_array = Maybe.just("single item"); + // Maybe.blockingSubscribe({},{}); + // Maybe.fromCallable ( requestDataFromServerAsync() ) + println("Finished Q1"); + + + println("Start Q2"); + //requestServerAsync(); + //assertTrue( is Unit); + /* val callable1 = object : Callable { + override fun call(): Int = 1 + } + val c1 = createCallable(callable1) + println("callable1 = ${c1.call()}") + + val callable2 = object : Callable { + override fun call(): Unit { println("Hello"); throw Exception("Hello") } + } + val c2 = createCallable(callable2) + c2.call() + + */ + + Completable.fromCallable ( object: Callable { + override fun call(): Unit { requestServerAsync()}} ). + subscribe({println("Successful");}, + { obj: Throwable -> obj.printStackTrace() } ); + //.fromCallable(requestServerAsync()) + //.timer(1L,TimeUnit.MILLISECONDS).blockingSubscribe({println("2")},{println("error2")}); + + + println("Finished Q2"); + + println("Start Q3"); + //val val1 = requestDataFromDbAsync(); + + /* Single.fromCallable ({ + var result: Int? = requestDataFromDbAsync() } + ).onErrorComplete(println("eee")) +*/ + //onErrorComplete(result: Throwable -> println("--")) + + /* blockingSubscribe({println("Successful");}, + { obj: Throwable -> obj.printStackTrace() }) + + */ + + +/* ({s : Int? -> println("Item received: from Single:"+s.toString()}) + { obj: Throwable -> obj.printStackTrace() }) + */ + println("Finish Q3"); + + println("Start Q4"); + emitEachSecond(); + println("Finish Q4"); + + + + } // 1) Какой источник лучше всего подойдёт для запроса на сервер, который возвращает результат? +// Maybe // Почему? +// Согласно лекции номер 2 // Дописать функцию -fun requestDataFromServerAsync() /* -> ??? */ { +fun requestDataFromServerAsync() : ByteArray? /* -> ??? */ { // Функция имитирует синхронный запрос на сервер, возвращающий результат fun getDataFromServerSync(): ByteArray? { Thread.sleep(LATENCY); val success = Random.nextBoolean() - return if (success) Random.nextBytes(RESPONSE_LENGTH) else null - } + //return if (success) Random.nextBytes(RESPONSE_LENGTH) else null + return Random.nextBytes(RESPONSE_LENGTH) + } + return getDataFromServerSync() /* return ??? */ } -//--Опля ))) - // 2) Какой источник лучше всего подойдёт для запроса на сервер, который НЕ возвращает результат? +//Completable // Почему? +// По определению .. // Дописать функцию -fun requestServerAsync() /* -> ??? */ { +fun requestServerAsync() :Unit /* -> ??? */ { // Функция имитирует синхронный запрос на сервер, не возвращающий результат fun getDataFromServerSync() { Thread.sleep(LATENCY) if (Random.nextBoolean()) throw ServerNotActiveException() } - + return getDataFromServerSync() /* return ??? */ } // 3) Какой источник лучше всего подойдёт для однократного асинхронного возвращения значения из базы данных? +//Single // Почему? +//Single — реактивный Callable, потому что тут появляется возможность вернуть результат операции. Продолжая сравнение с Kotlin, можно сказать, что Single — это fun single(): T { }. Таким образом, чтобы подписаться на него, необходимо реализовать onSuccess(T) и onError. + // Дописать функцию -fun requestDataFromDbAsync() /* -> ??? */ { +fun requestDataFromDbAsync() : T? /* -> ??? */ { // Функция имитирует синхронный запрос к БД не возвращающий результата fun getDataFromDbSync(): T? { Thread.sleep(LATENCY); return null } - + return getDataFromDbSync() /* return */ } @@ -78,7 +182,7 @@ fun emitEachSecond() { // Принтер fun printer(value: Long) = println("${Date()}: value = $value") - + source().doOnEach { Thread.sleep(2000L)}.blockingSubscribe({printer(it)}) // code here }