more typed actors

This commit is contained in:
Evgenii Alekseev 2022-01-19 12:19:55 +03:00
parent dc882b74bf
commit fee87ddbc8
5 changed files with 112 additions and 100 deletions

View File

@ -8,13 +8,15 @@
*/
package me.arcanis.ffxivbis.service.database.impl
import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
import me.arcanis.ffxivbis.messages._
import me.arcanis.ffxivbis.service.database.Database
trait DatabaseBiSHandler { this: Database =>
def bisHandler: DatabaseMessage.Handler = {
def bisHandler(msg: BisDatabaseMessage): Behavior[DatabaseMessage] =
msg match {
case AddPieceToBis(playerId, piece, client) =>
run(profile.insertPieceBiS(playerId, piece))(_ => client ! ())
Behaviors.same

View File

@ -11,7 +11,7 @@ package me.arcanis.ffxivbis.service.database.impl
import akka.actor.typed.scaladsl.{AbstractBehavior, ActorContext}
import akka.actor.typed.{Behavior, DispatcherSelector}
import com.typesafe.config.Config
import me.arcanis.ffxivbis.messages.DatabaseMessage
import me.arcanis.ffxivbis.messages.{BisDatabaseMessage, DatabaseMessage, LootDatabaseMessage, PartyDatabaseMessage, UserDatabaseMessage}
import me.arcanis.ffxivbis.service.database.Database
import me.arcanis.ffxivbis.storage.DatabaseProfile
@ -32,8 +32,12 @@ class DatabaseImpl(context: ActorContext[DatabaseMessage])
override val config: Config = context.system.settings.config
override val profile: DatabaseProfile = new DatabaseProfile(executionContext, config)
override def onMessage(msg: DatabaseMessage): Behavior[DatabaseMessage] = handle(msg)
private def handle: DatabaseMessage.Handler =
bisHandler.orElse(lootHandler).orElse(partyHandler).orElse(userHandler)
override def onMessage(msg: DatabaseMessage): Behavior[DatabaseMessage] =
msg match {
case msg: BisDatabaseMessage => bisHandler(msg)
case msg: LootDatabaseMessage => lootHandler(msg)
case msg: PartyDatabaseMessage => partyHandler(msg)
case msg: UserDatabaseMessage => userHandler(msg)
}
}

View File

@ -8,6 +8,7 @@
*/
package me.arcanis.ffxivbis.service.database.impl
import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
import me.arcanis.ffxivbis.messages._
import me.arcanis.ffxivbis.models.Loot
@ -17,7 +18,8 @@ import java.time.Instant
trait DatabaseLootHandler { this: Database =>
def lootHandler: DatabaseMessage.Handler = {
def lootHandler(msg: LootDatabaseMessage): Behavior[DatabaseMessage] =
msg match {
case AddPieceTo(playerId, piece, isFreeLoot, client) =>
val loot = Loot(-1, piece, Instant.now, isFreeLoot)
run(profile.insertPiece(playerId, loot))(_ => client ! ())

View File

@ -8,6 +8,7 @@
*/
package me.arcanis.ffxivbis.service.database.impl
import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
import me.arcanis.ffxivbis.messages._
import me.arcanis.ffxivbis.models.{BiS, Player}
@ -17,7 +18,8 @@ import scala.concurrent.Future
trait DatabasePartyHandler { this: Database =>
def partyHandler: DatabaseMessage.Handler = {
def partyHandler(msg: PartyDatabaseMessage): Behavior[DatabaseMessage] =
msg match {
case AddPlayer(player, client) =>
run(profile.insertPlayer(player))(_ => client ! ())
Behaviors.same

View File

@ -8,13 +8,15 @@
*/
package me.arcanis.ffxivbis.service.database.impl
import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
import me.arcanis.ffxivbis.messages._
import me.arcanis.ffxivbis.service.database.Database
trait DatabaseUserHandler { this: Database =>
def userHandler: DatabaseMessage.Handler = {
def userHandler(msg: UserDatabaseMessage): Behavior[DatabaseMessage] =
msg match {
case AddUser(user, isHashedPassword, client) =>
val toInsert = if (isHashedPassword) user else user.withHashedPassword
run(profile.insertUser(toInsert))(_ => client ! ())