어플리케이션 코딩 (2019.3.15) - codeport/scala GitHub Wiki

어플리케이션 코딩

SCodec Monix Nio

체크인 (기분/근황/기대하는 바)

  • Wayne
    • 간만에 무사히 참석해서 좋다.
    • 금요일만 되면 일이 생기고 있다.
    • 무사히 잘 배우고갔으면 좋겠다.
  • 통구이
    • 피곤하다.
    • 갑자기 바빠져서 이번주에 목표한 일을 이루지 못했다.
    • 배우고 갔으면 좋겠다.
  • 기영
    • 졸립다.
    • 소일거리를 알아보고 있고, 예비군 기다리고 있따.
    • 재밌게 하고 갔으면 좋겠다.
  • 유진
    • 평범하다.
    • 회사에서 리팩토링을 열심히 하고있다.
    • 스칼라를 잘 몰라서 잘 알아 갔으면 좋겠다.
  • 성큼
    • 피곤하다.
    • 갑자기 15kg짜리 짐이 생겼다.
    • Monix NIO를 보는 기회가 되었으면 좋겠다.

코드

import monix.reactive.{Consumer, Observable}
import monix.eval. { Callback, Task }
import monix.execution.Ack.Continue
import monix.nio.tcp._

object Server extends App {
implicit val ctx = monix.execution.Scheduler.Implicits.global

def respondT(server: TaskServerSocketChannel): Task[Unit] = for {
  socket <- server.accept()
  conn <- Task.now(readWriteAsync(socket))
  reader <- conn.tcpObservable
  writer <- conn.tcpConsumer
  _ <- reader.doOnTerminateEval(_ => conn.stopWriting()).consumeWith(Consumer.foreach { x =>
    println(new String(x))
  })
  _ <- conn.close()
  _ <- respondT(server)
} yield ()

val serverProgramT = for {
  server <- asyncServer(java.net.InetAddress.getByName(null).getHostName, 9001)
  _ <- respondT(server)
} yield ()


val callback = new monix.eval.Callback[Unit] {
  override def onSuccess(value: Unit): Unit = println("Completed")
  override def onError(ex: Throwable): Unit = println(ex)
}

serverProgramT.runAsync(callback)

}

회고(좋았던 점/아쉬웠던 점/다음주까지 할 일)

  • Wayne
    • Monix를 보게 되었다.
    • Monix를 처음봐서 잘 모르겠다.
    • 참석
  • 통구이
    • Monix 서버를 사용해봐서 좋았다.
    • 처음 써봐서 기본적인거에서도 엄청 돌아왔던것 같아서 아쉽다.
    • 시간나면 읽어보겠다.
  • 기영
    • 참석하는것을 보고 동작을 봐서 좋았다.
    • 없다.
    • 예비군 다녀오겠습니다.
  • 유진
    • rxJava를 공부하고 있어서 이해할 수 있는 부분이 있어서 좋았다.
    • 스칼라를 잘 몰라서 이해가 어려운 부분이 있었다.
    • 오늘 했던것을 복습해 오겠다.
  • 성큼
    • Monix NIO를 봐서 좋았다. 커넥션을 받을 수 있는 서버를 만들어 보았다.
    • 너무 헤멘것 같다.
    • 조금 만져보다가 오겠다.