Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
version = 3.8.3
version = 3.10.7
runner.dialect = scala3
38 changes: 19 additions & 19 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import scala.concurrent.duration.DurationInt

ThisBuild / scalaVersion := "3.3.4"
ThisBuild / scalaVersion := "3.3.7"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "io.adamnfish"
ThisBuild / organizationName := "adamnfish"
Expand All @@ -17,22 +17,22 @@ ThisBuild / scalacOptions ++= Seq(
"64"
)

val circeVersion = "0.14.10"
val scanamoVersion = "3.0.0"
val awsJavaSdkVersion = "2.29.43"
val circeVersion = "0.14.15"
val scanamoVersion = "6.0.0"
val awsJavaSdkVersion = "2.42.6"
val commonDeps = Seq(
"org.scalatest" %% "scalatest" % "3.2.19" % Test,
"org.scalameta" %% "munit" % "1.0.3" % Test,
"org.scalameta" %% "munit-scalacheck" % "1.0.0" % Test,
"org.scalameta" %% "munit" % "1.2.4" % Test,
"org.scalameta" %% "munit-scalacheck" % "1.2.0" % Test,
"org.typelevel" %% "scalacheck-effect-munit" % "1.0.4" % Test,
"org.typelevel" %% "munit-cats-effect" % "2.0.0" % Test,
"org.scalacheck" %% "scalacheck" % "1.18.1" % Test,
"org.scalatestplus" %% "scalacheck-1-18" % "3.2.19.0" % Test
"org.typelevel" %% "munit-cats-effect" % "2.1.0" % Test,
"org.scalacheck" %% "scalacheck" % "1.19.0" % Test,
"org.scalatestplus" %% "scalacheck-1-19" % "3.2.19.0" % Test
)
val loggingDeps = Seq(
"org.typelevel" %% "log4cats-slf4j" % "2.7.0",
"ch.qos.logback" % "logback-classic" % "1.5.15",
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.5"
"org.typelevel" %% "log4cats-slf4j" % "2.7.1",
"ch.qos.logback" % "logback-classic" % "1.5.32",
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.6"
)

// https://aws.amazon.com/blogs/developer/tuning-the-aws-java-sdk-2-x-to-reduce-startup-time/
Expand All @@ -54,8 +54,8 @@ lazy val core = (project in file("core"))
.settings(
name := "core",
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-core" % "2.12.0",
"org.typelevel" %% "cats-effect" % "3.5.7",
"org.typelevel" %% "cats-core" % "2.13.0",
"org.typelevel" %% "cats-effect" % "3.6.3",
"io.circe" %% "circe-core" % circeVersion,
"io.circe" %% "circe-generic" % circeVersion,
"io.circe" %% "circe-parser" % circeVersion,
Expand All @@ -70,9 +70,9 @@ lazy val lambda = (project in file("lambda"))
.settings(
name := "lambda",
libraryDependencies ++= Seq(
"com.amazonaws" % "aws-lambda-java-core" % "1.2.3",
"com.amazonaws" % "aws-lambda-java-events" % "3.14.0",
"com.amazonaws" % "aws-xray-recorder-sdk-core" % "2.18.2",
"com.amazonaws" % "aws-lambda-java-core" % "1.4.0",
"com.amazonaws" % "aws-lambda-java-events" % "3.16.1",
"com.amazonaws" % "aws-xray-recorder-sdk-core" % "2.20.0",
"software.amazon.awssdk" % "apigatewaymanagementapi" % awsJavaSdkVersion,
// TODO: use the async crt version for everything
"software.amazon.awssdk" % "url-connection-client" % awsJavaSdkVersion,
Expand All @@ -97,7 +97,7 @@ lazy val integration = (project in file("integration"))
.settings(
name := "integration",
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-effect-testing-scalatest" % "1.6.0" % Test,
"org.typelevel" %% "cats-effect-testing-scalatest" % "1.7.0" % Test,
// TODO: use the async crt version for everything
"software.amazon.awssdk" % "url-connection-client" % awsJavaSdkVersion % Test,
"software.amazon.awssdk" % "aws-crt-client" % awsJavaSdkVersion % Test,
Expand Down Expand Up @@ -125,7 +125,7 @@ lazy val devServer = (project in file("devserver"))
.settings(
name := "devserver",
libraryDependencies ++= Seq(
"io.javalin" % "javalin" % "5.6.3", // TODO: v6 is now out
"io.javalin" % "javalin" % "7.0.1",
"software.amazon.awssdk" % "dynamodb" % awsJavaSdkVersion,
// TODO: use the async crt version for everything
"software.amazon.awssdk" % "url-connection-client" % awsJavaSdkVersion,
Expand Down
112 changes: 49 additions & 63 deletions devserver/src/main/scala/io/adamnfish/pokerdot/DevServer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,7 @@ import software.amazon.awssdk.auth.credentials.{
StaticCredentialsProvider
}
import software.amazon.awssdk.regions.Region
import software.amazon.awssdk.services.dynamodb.{
DynamoDbAsyncClient,
DynamoDbClient
}
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient

import java.net.URI
import java.security.SecureRandom
Expand Down Expand Up @@ -87,9 +84,51 @@ object CatsDevServer extends IOApp:

app <- Resource.make {
IO.blocking {
val app = Javalin.create()
app.start(7000)
app
Javalin.create { config =>
config.routes.ws(
"/api",
{ ws =>
ws.onConnect { wctx =>
val result = for {
_ <- connectionPrinter(wctx.sessionId, true)
_ <- IO.blocking(messaging.connect(wctx))
} yield ()
result.unsafeRunSync()
}
ws.onClose { wctx =>
val result = for {
_ <- connectionPrinter(wctx.sessionId, false)
_ <- IO.blocking(messaging.disconnect(wctx))
} yield ()
result.unsafeRunSync()
}
ws.onMessage { wctx =>
val result =
for
_ <- messagePrinter(Inbound)(
wctx.sessionId,
wctx.message()
)
traceId <- IO(TraceId(UUID.randomUUID().toString))
appContext = appContextBuilder(
PlayerAddress(wctx.sessionId),
traceId
)
operation <- PokerDot.pokerdot(wctx.message(), appContext)
_ <- logger.info(s"completed $operation")
yield ()
result
.onError {
case failures: Failures =>
logger.error(failures)(s"error: ${failures.logString}")
case err =>
logger.error(err)(s"exception: ${err.getMessage}")
}
.unsafeRunSync()
}
}
)
}
}
} { app =>
IO.blocking(app.stop())
Expand All @@ -100,66 +139,13 @@ object CatsDevServer extends IOApp:
messagePrinter,
connectionPrinter,
messaging
// TODO add separate comection manager here?
// TODO add separate connection manager here?
)

override def run(args: List[String]): IO[ExitCode] =
components(args).use: components =>
IO {
components.app.ws(
"/api",
{ ws =>
ws.onConnect { wctx =>
val traceId = TraceId("connect")
val appContext = components.appContextBuilder(
PlayerAddress(wctx.getSessionId),
traceId
)
val result = for {
_ <- components.connectionPrinter(wctx.getSessionId, true)
_ <- IO.blocking(components.messaging.connect(wctx))
} yield ()
result.unsafeRunSync()
}
ws.onClose { wctx =>
val traceId = TraceId("close")
val appContext = components.appContextBuilder(
PlayerAddress(wctx.getSessionId),
traceId
)
val result = for {
_ <- components.connectionPrinter(wctx.getSessionId, false)
_ <- IO.blocking(components.messaging.disconnect(wctx))
} yield ()
result.unsafeRunSync()
}
ws.onMessage { wctx =>
val result =
for
_ <- components.messagePrinter(Inbound)(
wctx.getSessionId,
wctx.message
)
traceId <- IO(TraceId(UUID.randomUUID().toString))
appContext = components.appContextBuilder(
PlayerAddress(wctx.getSessionId),
traceId
)
operation <- PokerDot.pokerdot(wctx.message, appContext)
_ <- logger.info(s"completed $operation")
yield ()
result
.onError {
case failures: Failures =>
logger.error(failures)(s"error: ${failures.logString}")
case err =>
logger.error(err)(s"exception: ${err.getMessage}")
}
.unsafeRunSync()
}
}
)
}.as(ExitCode.Success) >> IO.never
IO.blocking(components.app.start(7000)) >>
IO.never.as(ExitCode.Success)

case class DevServerComponents(
app: Javalin,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class DevMessaging[F[_] : Sync : MonadThrow](logMessage: (String, String) => F[U
private val connections = new mutable.HashMap[String, WsContext]

def connect(wctx: WsContext): String = {
val playerAddress = wctx.getSessionId
val playerAddress = wctx.sessionId
connections.put(playerAddress, wctx)
playerAddress
}
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.10.11
sbt.version=1.12.5