Skip to content
This repository has been archived by the owner on Sep 9, 2021. It is now read-only.

Свечников Роман, 3530901/70201, lab3 #62

Closed
wants to merge 84 commits into from

Conversation

rsvechnikov
Copy link

Описание приложений и протоколов находятся в /lab3/README.md

@wrbbz wrbbz added the Третья лабораторная Задания из методички label Jan 7, 2021
@wrbbz
Copy link
Contributor

wrbbz commented Jan 16, 2021

Система голосования:

  • Отключение клиента от сервера ведет к необрабатываемому исключению:
Client accepted: /127.0.0.1:56052
kotlinx.coroutines.channels.ClosedReceiveChannelException: EOF: one byte required
        at io.ktor.utils.io.ByteBufferChannel.readByteSuspend(ByteBufferChannel.kt:726)
        at io.ktor.utils.io.ByteBufferChannel.readByte(ByteBufferChannel.kt:721)
        at io.ktor.utils.io.ByteBufferChannel.readByteSuspend(ByteBufferChannel.kt:727)
        at io.ktor.utils.io.ByteBufferChannel$readByteSuspend$1.invokeSuspend(ByteBufferChannel.kt)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:274)
        at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:84)
        at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
        at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
        at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
        at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
        at com.handtruth.net.lab3.nrating.ServerKt.main(Server.kt:26)

UPD: Как я уже писал @Ktlo, возможность одного клиента голосовать бесконечное кол-во раз. На это стоит обратить внимание. Либо обосновать такое решение, либо исправить. И эта часть будет зачтена

@wrbbz
Copy link
Contributor

wrbbz commented Jan 16, 2021

Система опвещения о событиях:

  • Клиент собрался, но не запускается:
➜  ./gradlew :sevent-client:run

> Task :sevent-client:run FAILED

 ____    ____                           __
/\  _`\ /\  _`\                        /\ \__
\ \,\L\_\ \ \L\_\  __  __     __    ___\ \ ,_\
 \/_\__ \\ \  _\L /\ \/\ \  /'__`\/' _ `\ \ \/
   /\ \L\ \ \ \L\ \ \ \_/ |/\  __//\ \/\ \ \ \_
   \ `\____\ \____/\ \___/ \ \____\ \_\ \_\ \__\
    \/_____/\/___/  \/__/   \/____/\/_/\/_/\/__/


========================================================

Usage:
        get events                                               Get all the existing events
        get subs                                                 Get all your active subscriptions
        add event "Event name"                   Add a new event in the system.
            <period> [<repetitions>]     Period is in seconds. Repetitions number is optional
        add sub <eventId>                                Subscribe to the event with given id
        del event <eventId>                      Delete the event with given id
        del sub <eventId>                                Cancel subscription to the event with given id
        ext                                                      Exit

Exception in thread "main" java.lang.NullPointerException
        at com.handtruth.net.lab3.sevent.ClientKt.handleUserInput(Client.kt:114)
        at com.handtruth.net.lab3.sevent.ClientKt$runClient$2.invokeSuspend(Client.kt:50)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':sevent-client:run'.
> Process 'command '/usr/lib/jvm/java-15-openjdk/bin/java'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
12 actionable tasks: 1 executed, 11 up-to-date

По протоколу претензий нет. Все хорошо

@rsvechnikov
Copy link
Author

rsvechnikov commented Jan 18, 2021

Система голосования:

  • Добавил обработку исключения при выходе клиента.
  • По поводу возможности голосовать одному клиенту неограниченное количество раз: согласен, что это весьма странная система голосования выходит, но если я правильно понял задание, такого ограничения и не требовалось (по крайней мере явно этого не написано, напротив, даже указано, что клиент должен уметь подавать несколько голосов за конкретную альтернативу). Учитывая это, на данный момент вводить такое ограничение наверное бессмысленно. Ограничение количества голосов потребовало бы введения регистрации, что в свою очередь повлекло бы изменение протокола, из за чего надо было бы дорабатывать и сервер и клиент.

Система оповещения о событиях:

Как оказалось, gradle по какой-то причине закрывает stdin, из которого происходит чтение команд. Добавил обработку этого случая, чтобы не вылетало исключения.

UPD: как запускать:

  1. Запускаем таск sevent-client:installDist
  2. В sevent/client появилась папка build/install, в ней запускаем /bin/sevent-client

При запуске таким способом stdin не закрывается, и все работает, как должно было

@wrbbz
Copy link
Contributor

wrbbz commented Jan 18, 2021

Отключение клиента при отключении сервера отсутствует. В остальном - все ок

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Зачтено Третья лабораторная Задания из методички
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants