mirror of
https://github.com/arcan1s/ffxivbis.git
synced 2025-04-25 01:37:17 +00:00
more typed actors
This commit is contained in:
parent
dc882b74bf
commit
fee87ddbc8
@ -8,30 +8,32 @@
|
|||||||
*/
|
*/
|
||||||
package me.arcanis.ffxivbis.service.database.impl
|
package me.arcanis.ffxivbis.service.database.impl
|
||||||
|
|
||||||
|
import akka.actor.typed.Behavior
|
||||||
import akka.actor.typed.scaladsl.Behaviors
|
import akka.actor.typed.scaladsl.Behaviors
|
||||||
import me.arcanis.ffxivbis.messages._
|
import me.arcanis.ffxivbis.messages._
|
||||||
import me.arcanis.ffxivbis.service.database.Database
|
import me.arcanis.ffxivbis.service.database.Database
|
||||||
|
|
||||||
trait DatabaseBiSHandler { this: Database =>
|
trait DatabaseBiSHandler { this: Database =>
|
||||||
|
|
||||||
def bisHandler: DatabaseMessage.Handler = {
|
def bisHandler(msg: BisDatabaseMessage): Behavior[DatabaseMessage] =
|
||||||
case AddPieceToBis(playerId, piece, client) =>
|
msg match {
|
||||||
run(profile.insertPieceBiS(playerId, piece))(_ => client ! ())
|
case AddPieceToBis(playerId, piece, client) =>
|
||||||
Behaviors.same
|
run(profile.insertPieceBiS(playerId, piece))(_ => client ! ())
|
||||||
|
Behaviors.same
|
||||||
|
|
||||||
case GetBiS(partyId, maybePlayerId, client) =>
|
case GetBiS(partyId, maybePlayerId, client) =>
|
||||||
run {
|
run {
|
||||||
getParty(partyId, withBiS = true, withLoot = false)
|
getParty(partyId, withBiS = true, withLoot = false)
|
||||||
.map(filterParty(_, maybePlayerId))
|
.map(filterParty(_, maybePlayerId))
|
||||||
}(client ! _)
|
}(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePieceFromBiS(playerId, piece, client) =>
|
case RemovePieceFromBiS(playerId, piece, client) =>
|
||||||
run(profile.deletePieceBiS(playerId, piece))(_ => client ! ())
|
run(profile.deletePieceBiS(playerId, piece))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePiecesFromBiS(playerId, client) =>
|
case RemovePiecesFromBiS(playerId, client) =>
|
||||||
run(profile.deletePiecesBiS(playerId))(_ => client ! ())
|
run(profile.deletePiecesBiS(playerId))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ package me.arcanis.ffxivbis.service.database.impl
|
|||||||
import akka.actor.typed.scaladsl.{AbstractBehavior, ActorContext}
|
import akka.actor.typed.scaladsl.{AbstractBehavior, ActorContext}
|
||||||
import akka.actor.typed.{Behavior, DispatcherSelector}
|
import akka.actor.typed.{Behavior, DispatcherSelector}
|
||||||
import com.typesafe.config.Config
|
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.service.database.Database
|
||||||
import me.arcanis.ffxivbis.storage.DatabaseProfile
|
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 config: Config = context.system.settings.config
|
||||||
override val profile: DatabaseProfile = new DatabaseProfile(executionContext, config)
|
override val profile: DatabaseProfile = new DatabaseProfile(executionContext, config)
|
||||||
|
|
||||||
override def onMessage(msg: DatabaseMessage): Behavior[DatabaseMessage] = handle(msg)
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
private def handle: DatabaseMessage.Handler =
|
|
||||||
bisHandler.orElse(lootHandler).orElse(partyHandler).orElse(userHandler)
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
package me.arcanis.ffxivbis.service.database.impl
|
package me.arcanis.ffxivbis.service.database.impl
|
||||||
|
|
||||||
|
import akka.actor.typed.Behavior
|
||||||
import akka.actor.typed.scaladsl.Behaviors
|
import akka.actor.typed.scaladsl.Behaviors
|
||||||
import me.arcanis.ffxivbis.messages._
|
import me.arcanis.ffxivbis.messages._
|
||||||
import me.arcanis.ffxivbis.models.Loot
|
import me.arcanis.ffxivbis.models.Loot
|
||||||
@ -17,28 +18,29 @@ import java.time.Instant
|
|||||||
|
|
||||||
trait DatabaseLootHandler { this: Database =>
|
trait DatabaseLootHandler { this: Database =>
|
||||||
|
|
||||||
def lootHandler: DatabaseMessage.Handler = {
|
def lootHandler(msg: LootDatabaseMessage): Behavior[DatabaseMessage] =
|
||||||
case AddPieceTo(playerId, piece, isFreeLoot, client) =>
|
msg match {
|
||||||
val loot = Loot(-1, piece, Instant.now, isFreeLoot)
|
case AddPieceTo(playerId, piece, isFreeLoot, client) =>
|
||||||
run(profile.insertPiece(playerId, loot))(_ => client ! ())
|
val loot = Loot(-1, piece, Instant.now, isFreeLoot)
|
||||||
Behaviors.same
|
run(profile.insertPiece(playerId, loot))(_ => client ! ())
|
||||||
|
Behaviors.same
|
||||||
|
|
||||||
case GetLoot(partyId, maybePlayerId, client) =>
|
case GetLoot(partyId, maybePlayerId, client) =>
|
||||||
run {
|
run {
|
||||||
getParty(partyId, withBiS = false, withLoot = true)
|
getParty(partyId, withBiS = false, withLoot = true)
|
||||||
.map(filterParty(_, maybePlayerId))
|
.map(filterParty(_, maybePlayerId))
|
||||||
}(client ! _)
|
}(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePieceFrom(playerId, piece, isFreeLoot, client) =>
|
case RemovePieceFrom(playerId, piece, isFreeLoot, client) =>
|
||||||
run(profile.deletePiece(playerId, piece, isFreeLoot))(_ => client ! ())
|
run(profile.deletePiece(playerId, piece, isFreeLoot))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case SuggestLoot(partyId, piece, client) =>
|
case SuggestLoot(partyId, piece, client) =>
|
||||||
run {
|
run {
|
||||||
getParty(partyId, withBiS = true, withLoot = true)
|
getParty(partyId, withBiS = true, withLoot = true)
|
||||||
.map(_.suggestLoot(piece))
|
.map(_.suggestLoot(piece))
|
||||||
}(client ! _)
|
}(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
package me.arcanis.ffxivbis.service.database.impl
|
package me.arcanis.ffxivbis.service.database.impl
|
||||||
|
|
||||||
|
import akka.actor.typed.Behavior
|
||||||
import akka.actor.typed.scaladsl.Behaviors
|
import akka.actor.typed.scaladsl.Behaviors
|
||||||
import me.arcanis.ffxivbis.messages._
|
import me.arcanis.ffxivbis.messages._
|
||||||
import me.arcanis.ffxivbis.models.{BiS, Player}
|
import me.arcanis.ffxivbis.models.{BiS, Player}
|
||||||
@ -17,50 +18,51 @@ import scala.concurrent.Future
|
|||||||
|
|
||||||
trait DatabasePartyHandler { this: Database =>
|
trait DatabasePartyHandler { this: Database =>
|
||||||
|
|
||||||
def partyHandler: DatabaseMessage.Handler = {
|
def partyHandler(msg: PartyDatabaseMessage): Behavior[DatabaseMessage] =
|
||||||
case AddPlayer(player, client) =>
|
msg match {
|
||||||
run(profile.insertPlayer(player))(_ => client ! ())
|
case AddPlayer(player, client) =>
|
||||||
Behaviors.same
|
run(profile.insertPlayer(player))(_ => client ! ())
|
||||||
|
Behaviors.same
|
||||||
|
|
||||||
case GetParty(partyId, client) =>
|
case GetParty(partyId, client) =>
|
||||||
run(getParty(partyId, withBiS = true, withLoot = true))(client ! _)
|
run(getParty(partyId, withBiS = true, withLoot = true))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetPartyDescription(partyId, client) =>
|
case GetPartyDescription(partyId, client) =>
|
||||||
run(profile.getPartyDescription(partyId))(client ! _)
|
run(profile.getPartyDescription(partyId))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetPlayer(playerId, client) =>
|
case GetPlayer(playerId, client) =>
|
||||||
run {
|
run {
|
||||||
profile
|
profile
|
||||||
.getPlayerFull(playerId)
|
.getPlayerFull(playerId)
|
||||||
.flatMap { maybePlayerData =>
|
.flatMap { maybePlayerData =>
|
||||||
Future.traverse(maybePlayerData.toSeq) { playerData =>
|
Future.traverse(maybePlayerData.toSeq) { playerData =>
|
||||||
for {
|
for {
|
||||||
bis <- profile.getPiecesBiS(playerId)
|
bis <- profile.getPiecesBiS(playerId)
|
||||||
loot <- profile.getPieces(playerId)
|
loot <- profile.getPieces(playerId)
|
||||||
} yield Player(
|
} yield Player(
|
||||||
playerData.id,
|
playerData.id,
|
||||||
playerId.partyId,
|
playerId.partyId,
|
||||||
playerId.job,
|
playerId.job,
|
||||||
playerId.nick,
|
playerId.nick,
|
||||||
BiS(bis.map(_.piece)),
|
BiS(bis.map(_.piece)),
|
||||||
loot,
|
loot,
|
||||||
playerData.link,
|
playerData.link,
|
||||||
playerData.priority
|
playerData.priority
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
.map(_.headOption)
|
||||||
.map(_.headOption)
|
}(client ! _)
|
||||||
}(client ! _)
|
Behaviors.same
|
||||||
Behaviors.same
|
|
||||||
|
|
||||||
case RemovePlayer(playerId, client) =>
|
case RemovePlayer(playerId, client) =>
|
||||||
run(profile.deletePlayer(playerId))(_ => client ! ())
|
run(profile.deletePlayer(playerId))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case UpdateParty(description, client) =>
|
case UpdateParty(description, client) =>
|
||||||
run(profile.insertPartyDescription(description))(_ => client ! ())
|
run(profile.insertPartyDescription(description))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,32 +8,34 @@
|
|||||||
*/
|
*/
|
||||||
package me.arcanis.ffxivbis.service.database.impl
|
package me.arcanis.ffxivbis.service.database.impl
|
||||||
|
|
||||||
|
import akka.actor.typed.Behavior
|
||||||
import akka.actor.typed.scaladsl.Behaviors
|
import akka.actor.typed.scaladsl.Behaviors
|
||||||
import me.arcanis.ffxivbis.messages._
|
import me.arcanis.ffxivbis.messages._
|
||||||
import me.arcanis.ffxivbis.service.database.Database
|
import me.arcanis.ffxivbis.service.database.Database
|
||||||
|
|
||||||
trait DatabaseUserHandler { this: Database =>
|
trait DatabaseUserHandler { this: Database =>
|
||||||
|
|
||||||
def userHandler: DatabaseMessage.Handler = {
|
def userHandler(msg: UserDatabaseMessage): Behavior[DatabaseMessage] =
|
||||||
case AddUser(user, isHashedPassword, client) =>
|
msg match {
|
||||||
val toInsert = if (isHashedPassword) user else user.withHashedPassword
|
case AddUser(user, isHashedPassword, client) =>
|
||||||
run(profile.insertUser(toInsert))(_ => client ! ())
|
val toInsert = if (isHashedPassword) user else user.withHashedPassword
|
||||||
Behaviors.same
|
run(profile.insertUser(toInsert))(_ => client ! ())
|
||||||
|
Behaviors.same
|
||||||
|
|
||||||
case DeleteUser(partyId, username, client) =>
|
case DeleteUser(partyId, username, client) =>
|
||||||
run(profile.deleteUser(partyId, username))(_ => client ! ())
|
run(profile.deleteUser(partyId, username))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case Exists(partyId, client) =>
|
case Exists(partyId, client) =>
|
||||||
run(profile.exists(partyId))(client ! _)
|
run(profile.exists(partyId))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetUser(partyId, username, client) =>
|
case GetUser(partyId, username, client) =>
|
||||||
run(profile.getUser(partyId, username))(client ! _)
|
run(profile.getUser(partyId, username))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetUsers(partyId, client) =>
|
case GetUsers(partyId, client) =>
|
||||||
run(profile.getUsers(partyId))(client ! _)
|
run(profile.getUsers(partyId))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user