mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-07-14 16:04:43 +00:00
working GalaxyService based on GenericEventService
This commit is contained in:
parent
406e89ea50
commit
be803f0d03
6 changed files with 56 additions and 145 deletions
|
|
@ -19,7 +19,7 @@ trait GenericMessageEnvelope {
|
||||||
def response(outChannel: String): GenericResponseEnvelope
|
def response(outChannel: String): GenericResponseEnvelope
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class GenericEventService[OUT <: GenericResponseEnvelope](busName: String)
|
abstract class GenericEventService[IN <: GenericMessageEnvelope, OUT <: GenericResponseEnvelope](busName: String)
|
||||||
extends Actor {
|
extends Actor {
|
||||||
protected lazy val log: Logger = org.log4s.getLogger(getClass.getSimpleName)
|
protected lazy val log: Logger = org.log4s.getLogger(getClass.getSimpleName)
|
||||||
|
|
||||||
|
|
@ -47,7 +47,7 @@ abstract class GenericEventService[OUT <: GenericResponseEnvelope](busName: Stri
|
||||||
def receive: Receive =
|
def receive: Receive =
|
||||||
commonJoinBehavior.orElse(commonLeaveBehavior)
|
commonJoinBehavior.orElse(commonLeaveBehavior)
|
||||||
.orElse {
|
.orElse {
|
||||||
case msg: GenericMessageEnvelope =>
|
case msg: IN =>
|
||||||
compose(msg)
|
compose(msg)
|
||||||
|
|
||||||
case msg => ()
|
case msg => ()
|
||||||
|
|
|
||||||
|
|
@ -16,11 +16,11 @@ trait GenericMessageToSupportEnvelope
|
||||||
def response(outChannel: String): GenericResponseEnvelope = null
|
def response(outChannel: String): GenericResponseEnvelope = null
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class GenericEventServiceWithSupport[OUT <: GenericResponseEnvelope](
|
abstract class GenericEventServiceWithSupport[IN <: GenericMessageEnvelope, OUT <: GenericResponseEnvelope]
|
||||||
busName: String,
|
(
|
||||||
eventSupportServices: List[EventServiceSupport]
|
busName: String,
|
||||||
)
|
eventSupportServices: List[EventServiceSupport]
|
||||||
extends GenericEventService[OUT](busName) {
|
) extends GenericEventService[IN, OUT](busName) {
|
||||||
|
|
||||||
private val supportServices: Map[String, ActorRef] =
|
private val supportServices: Map[String, ActorRef] =
|
||||||
eventSupportServices
|
eventSupportServices
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
// Copyright (c) 2017-2026 PSForever
|
||||||
|
package net.psforever.services.galaxy
|
||||||
|
|
||||||
|
import net.psforever.objects.Vehicle
|
||||||
|
import net.psforever.objects.vehicles.VehicleManifest
|
||||||
|
import net.psforever.objects.zones.{HotSpotInfo, Zone}
|
||||||
|
import net.psforever.packet.PlanetSideGamePacket
|
||||||
|
import net.psforever.packet.game.{BuildingInfoUpdateMessage, CaptureFlagUpdateMessage}
|
||||||
|
import net.psforever.services.base.SelfResponseMessage
|
||||||
|
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID}
|
||||||
|
|
||||||
|
object GalaxyAction {
|
||||||
|
final case class HotSpotUpdate(zone_id: Int, priority: Int, host_spot_info: List[HotSpotInfo]) extends SelfResponseMessage
|
||||||
|
|
||||||
|
final case class MapUpdate(msg: BuildingInfoUpdateMessage) extends SelfResponseMessage
|
||||||
|
|
||||||
|
final case class FlagMapUpdate(msg: CaptureFlagUpdateMessage) extends SelfResponseMessage
|
||||||
|
|
||||||
|
final case class TransferPassenger(
|
||||||
|
player_guid: PlanetSideGUID,
|
||||||
|
temp_channel: String,
|
||||||
|
vehicle: Vehicle,
|
||||||
|
vehicle_to_delete: PlanetSideGUID,
|
||||||
|
manifest: VehicleManifest
|
||||||
|
) extends SelfResponseMessage
|
||||||
|
|
||||||
|
final case class UpdateBroadcastPrivileges(
|
||||||
|
zoneId: Int,
|
||||||
|
gateMapId: Int,
|
||||||
|
fromFactions: Set[PlanetSideEmpire.Value],
|
||||||
|
toFactions: Set[PlanetSideEmpire.Value]
|
||||||
|
) extends SelfResponseMessage
|
||||||
|
|
||||||
|
final case class LockedZoneUpdate(zone: Zone, timeUntilUnlock: Long) extends SelfResponseMessage
|
||||||
|
|
||||||
|
final case class UnlockedZoneUpdate(zone: Zone) extends SelfResponseMessage
|
||||||
|
|
||||||
|
final case class LogStatusChange(name: String) extends SelfResponseMessage
|
||||||
|
|
||||||
|
final case class SendResponse(msg: PlanetSideGamePacket) extends SelfResponseMessage
|
||||||
|
}
|
||||||
|
|
@ -1,42 +1,7 @@
|
||||||
// Copyright (c) 2017 PSForever
|
// Copyright (c) 2017-2026 PSForever
|
||||||
package net.psforever.services.galaxy
|
package net.psforever.services.galaxy
|
||||||
|
|
||||||
import akka.actor.Actor
|
import net.psforever.services.base.GenericEventService
|
||||||
import net.psforever.services.base.GenericEventBus
|
|
||||||
import net.psforever.services.Service
|
|
||||||
|
|
||||||
class GalaxyService extends Actor {
|
class GalaxyService
|
||||||
private[this] val log = org.log4s.getLogger
|
extends GenericEventService[GalaxyServiceMessage, GalaxyServiceResponse](busName = "Galaxy")
|
||||||
|
|
||||||
val GalaxyEvents = new GenericEventBus[GalaxyServiceResponse]
|
|
||||||
|
|
||||||
private def correctChannelName(channel: String): String = {
|
|
||||||
if (channel.isEmpty) {
|
|
||||||
s"/Galaxy"
|
|
||||||
} else {
|
|
||||||
s"/$channel/Galaxy"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def receive: Receive = {
|
|
||||||
case Service.Join(channel) =>
|
|
||||||
val path = correctChannelName(channel)
|
|
||||||
GalaxyEvents.subscribe(sender(), path)
|
|
||||||
|
|
||||||
case Service.Leave(None) =>
|
|
||||||
GalaxyEvents.unsubscribe(sender())
|
|
||||||
|
|
||||||
case Service.Leave(Some(channel)) =>
|
|
||||||
val path = s"/$channel/Galaxy"
|
|
||||||
GalaxyEvents.unsubscribe(sender(), path)
|
|
||||||
|
|
||||||
case Service.LeaveAll() =>
|
|
||||||
GalaxyEvents.unsubscribe(sender())
|
|
||||||
|
|
||||||
case msg @ GalaxyServiceMessage(forChannel, _) =>
|
|
||||||
GalaxyEvents.publish(msg.response(correctChannelName(forChannel)))
|
|
||||||
|
|
||||||
case msg =>
|
|
||||||
log.warn(s"Unhandled message $msg from ${sender()}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,9 @@
|
||||||
// Copyright (c) 2017 PSForever
|
// Copyright (c) 2017 PSForever
|
||||||
package net.psforever.services.galaxy
|
package net.psforever.services.galaxy
|
||||||
|
|
||||||
import net.psforever.objects.Vehicle
|
|
||||||
import net.psforever.objects.vehicles.VehicleManifest
|
|
||||||
import net.psforever.objects.zones.{HotSpotInfo, Zone}
|
|
||||||
import net.psforever.packet.PlanetSideGamePacket
|
|
||||||
import net.psforever.packet.game.{BuildingInfoUpdateMessage, CaptureFlagUpdateMessage}
|
|
||||||
import net.psforever.services.Service
|
import net.psforever.services.Service
|
||||||
import net.psforever.services.base.{EventMessage, EventResponse, GenericMessageEnvelope, SelfResponseMessage}
|
import net.psforever.services.base.{EventMessage, GenericMessageEnvelope}
|
||||||
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID}
|
import net.psforever.types.PlanetSideGUID
|
||||||
|
|
||||||
final case class GalaxyServiceMessage(channel: String, msg: EventMessage)
|
final case class GalaxyServiceMessage(channel: String, msg: EventMessage)
|
||||||
extends GenericMessageEnvelope {
|
extends GenericMessageEnvelope {
|
||||||
|
|
@ -20,59 +15,5 @@ final case class GalaxyServiceMessage(channel: String, msg: EventMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
object GalaxyServiceMessage {
|
object GalaxyServiceMessage {
|
||||||
def apply(actionMessage: GalaxyAction.Action): GalaxyServiceMessage = GalaxyServiceMessage("", actionMessage)
|
def apply(actionMessage: EventMessage): GalaxyServiceMessage = GalaxyServiceMessage("", actionMessage)
|
||||||
}
|
|
||||||
|
|
||||||
object GalaxyAction {
|
|
||||||
trait Action extends EventMessage
|
|
||||||
trait Response extends EventResponse
|
|
||||||
|
|
||||||
final case class HotSpotUpdate(zone_id: Int, priority: Int, host_spot_info: List[HotSpotInfo])
|
|
||||||
extends Action
|
|
||||||
with Response
|
|
||||||
with SelfResponseMessage
|
|
||||||
|
|
||||||
final case class MapUpdate(msg: BuildingInfoUpdateMessage)
|
|
||||||
extends Action
|
|
||||||
with Response
|
|
||||||
with SelfResponseMessage
|
|
||||||
|
|
||||||
final case class FlagMapUpdate(msg: CaptureFlagUpdateMessage) extends Action
|
|
||||||
with Response
|
|
||||||
with SelfResponseMessage
|
|
||||||
|
|
||||||
final case class TransferPassenger(
|
|
||||||
player_guid: PlanetSideGUID,
|
|
||||||
temp_channel: String,
|
|
||||||
vehicle: Vehicle,
|
|
||||||
vehicle_to_delete: PlanetSideGUID,
|
|
||||||
manifest: VehicleManifest
|
|
||||||
) extends Action
|
|
||||||
with Response
|
|
||||||
with SelfResponseMessage
|
|
||||||
|
|
||||||
final case class UpdateBroadcastPrivileges(
|
|
||||||
zoneId: Int,
|
|
||||||
gateMapId: Int,
|
|
||||||
fromFactions: Set[PlanetSideEmpire.Value],
|
|
||||||
toFactions: Set[PlanetSideEmpire.Value]
|
|
||||||
) extends Action
|
|
||||||
with Response
|
|
||||||
with SelfResponseMessage
|
|
||||||
|
|
||||||
final case class LockedZoneUpdate(zone: Zone, timeUntilUnlock: Long) extends Action
|
|
||||||
with Response
|
|
||||||
with SelfResponseMessage
|
|
||||||
|
|
||||||
final case class UnlockedZoneUpdate(zone: Zone) extends Action
|
|
||||||
with Response
|
|
||||||
with SelfResponseMessage
|
|
||||||
|
|
||||||
final case class LogStatusChange(name: String) extends Action
|
|
||||||
with Response
|
|
||||||
with SelfResponseMessage
|
|
||||||
|
|
||||||
final case class SendResponse(msg: PlanetSideGamePacket) extends Action
|
|
||||||
with Response
|
|
||||||
with SelfResponseMessage
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,7 @@
|
||||||
// Copyright (c) 2017 PSForever
|
// Copyright (c) 2017 PSForever
|
||||||
package net.psforever.services.galaxy
|
package net.psforever.services.galaxy
|
||||||
|
|
||||||
import net.psforever.objects.Vehicle
|
import net.psforever.types.PlanetSideGUID
|
||||||
import net.psforever.objects.vehicles.VehicleManifest
|
|
||||||
import net.psforever.objects.zones.{HotSpotInfo, Zone}
|
|
||||||
import net.psforever.packet.PlanetSideGamePacket
|
|
||||||
import net.psforever.packet.game.{BuildingInfoUpdateMessage, CaptureFlagUpdateMessage}
|
|
||||||
import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID}
|
|
||||||
import net.psforever.services.Service
|
import net.psforever.services.Service
|
||||||
import net.psforever.services.base.{EventResponse, GenericResponseEnvelope}
|
import net.psforever.services.base.{EventResponse, GenericResponseEnvelope}
|
||||||
|
|
||||||
|
|
@ -14,34 +9,3 @@ final case class GalaxyServiceResponse(channel: String, reply: EventResponse)
|
||||||
extends GenericResponseEnvelope {
|
extends GenericResponseEnvelope {
|
||||||
def exclude: PlanetSideGUID = Service.defaultPlayerGUID
|
def exclude: PlanetSideGUID = Service.defaultPlayerGUID
|
||||||
}
|
}
|
||||||
|
|
||||||
object GalaxyResponse {
|
|
||||||
trait Response extends EventResponse
|
|
||||||
|
|
||||||
final case class HotSpotUpdate(zone_id: Int, priority: Int, host_spot_info: List[HotSpotInfo]) extends Response
|
|
||||||
final case class MapUpdate(msg: BuildingInfoUpdateMessage) extends Response
|
|
||||||
final case class FlagMapUpdate(msg: CaptureFlagUpdateMessage) extends Response
|
|
||||||
|
|
||||||
|
|
||||||
final case class TransferPassenger(
|
|
||||||
temp_channel: String,
|
|
||||||
vehicle: Vehicle,
|
|
||||||
vehicle_to_delete: PlanetSideGUID,
|
|
||||||
manifest: VehicleManifest
|
|
||||||
) extends Response
|
|
||||||
|
|
||||||
final case class UpdateBroadcastPrivileges(
|
|
||||||
zoneId: Int,
|
|
||||||
gateMapId: Int,
|
|
||||||
fromFactions: Set[PlanetSideEmpire.Value],
|
|
||||||
toFactions: Set[PlanetSideEmpire.Value]
|
|
||||||
) extends Response
|
|
||||||
|
|
||||||
final case class LockedZoneUpdate(zone: Zone, timeUntilUnlock: Long) extends Response
|
|
||||||
|
|
||||||
final case class UnlockedZoneUpdate(zone: Zone) extends Response
|
|
||||||
|
|
||||||
final case class LogStatusChange(name: String) extends Response
|
|
||||||
|
|
||||||
final case class SendResponse(msg: PlanetSideGamePacket) extends Response
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue