diff --git a/src/main/scala/net/psforever/services/base/GenericEventService.scala b/src/main/scala/net/psforever/services/base/GenericEventService.scala index dd4477a87..068ad6a76 100644 --- a/src/main/scala/net/psforever/services/base/GenericEventService.scala +++ b/src/main/scala/net/psforever/services/base/GenericEventService.scala @@ -19,7 +19,7 @@ trait GenericMessageEnvelope { def response(outChannel: String): GenericResponseEnvelope } -abstract class GenericEventService[OUT <: GenericResponseEnvelope](busName: String) +abstract class GenericEventService[IN <: GenericMessageEnvelope, OUT <: GenericResponseEnvelope](busName: String) extends Actor { protected lazy val log: Logger = org.log4s.getLogger(getClass.getSimpleName) @@ -47,7 +47,7 @@ abstract class GenericEventService[OUT <: GenericResponseEnvelope](busName: Stri def receive: Receive = commonJoinBehavior.orElse(commonLeaveBehavior) .orElse { - case msg: GenericMessageEnvelope => + case msg: IN => compose(msg) case msg => () diff --git a/src/main/scala/net/psforever/services/base/GenericEventServiceWithSupport.scala b/src/main/scala/net/psforever/services/base/GenericEventServiceWithSupport.scala index 0352ab014..6e3a33b2a 100644 --- a/src/main/scala/net/psforever/services/base/GenericEventServiceWithSupport.scala +++ b/src/main/scala/net/psforever/services/base/GenericEventServiceWithSupport.scala @@ -16,11 +16,11 @@ trait GenericMessageToSupportEnvelope def response(outChannel: String): GenericResponseEnvelope = null } -abstract class GenericEventServiceWithSupport[OUT <: GenericResponseEnvelope]( - busName: String, - eventSupportServices: List[EventServiceSupport] - ) - extends GenericEventService[OUT](busName) { +abstract class GenericEventServiceWithSupport[IN <: GenericMessageEnvelope, OUT <: GenericResponseEnvelope] +( + busName: String, + eventSupportServices: List[EventServiceSupport] +) extends GenericEventService[IN, OUT](busName) { private val supportServices: Map[String, ActorRef] = eventSupportServices diff --git a/src/main/scala/net/psforever/services/galaxy/GalaxyAction.scala b/src/main/scala/net/psforever/services/galaxy/GalaxyAction.scala new file mode 100644 index 000000000..64a813446 --- /dev/null +++ b/src/main/scala/net/psforever/services/galaxy/GalaxyAction.scala @@ -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 +} diff --git a/src/main/scala/net/psforever/services/galaxy/GalaxyService.scala b/src/main/scala/net/psforever/services/galaxy/GalaxyService.scala index df9195c5f..a640d1ddb 100644 --- a/src/main/scala/net/psforever/services/galaxy/GalaxyService.scala +++ b/src/main/scala/net/psforever/services/galaxy/GalaxyService.scala @@ -1,42 +1,7 @@ -// Copyright (c) 2017 PSForever +// Copyright (c) 2017-2026 PSForever package net.psforever.services.galaxy -import akka.actor.Actor -import net.psforever.services.base.GenericEventBus -import net.psforever.services.Service +import net.psforever.services.base.GenericEventService -class GalaxyService extends Actor { - private[this] val log = org.log4s.getLogger - - 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()}") - } -} +class GalaxyService + extends GenericEventService[GalaxyServiceMessage, GalaxyServiceResponse](busName = "Galaxy") diff --git a/src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala b/src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala index 504c014ff..8c115ec75 100644 --- a/src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala +++ b/src/main/scala/net/psforever/services/galaxy/GalaxyServiceMessage.scala @@ -1,14 +1,9 @@ // Copyright (c) 2017 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.Service -import net.psforever.services.base.{EventMessage, EventResponse, GenericMessageEnvelope, SelfResponseMessage} -import net.psforever.types.{PlanetSideEmpire, PlanetSideGUID} +import net.psforever.services.base.{EventMessage, GenericMessageEnvelope} +import net.psforever.types.PlanetSideGUID final case class GalaxyServiceMessage(channel: String, msg: EventMessage) extends GenericMessageEnvelope { @@ -20,59 +15,5 @@ final case class GalaxyServiceMessage(channel: String, msg: EventMessage) } object GalaxyServiceMessage { - def apply(actionMessage: GalaxyAction.Action): 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 + def apply(actionMessage: EventMessage): GalaxyServiceMessage = GalaxyServiceMessage("", actionMessage) } diff --git a/src/main/scala/net/psforever/services/galaxy/GalaxyServiceResponse.scala b/src/main/scala/net/psforever/services/galaxy/GalaxyServiceResponse.scala index 64d50871c..70d072f9b 100644 --- a/src/main/scala/net/psforever/services/galaxy/GalaxyServiceResponse.scala +++ b/src/main/scala/net/psforever/services/galaxy/GalaxyServiceResponse.scala @@ -1,12 +1,7 @@ // Copyright (c) 2017 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.types.{PlanetSideEmpire, PlanetSideGUID} +import net.psforever.types.PlanetSideGUID import net.psforever.services.Service import net.psforever.services.base.{EventResponse, GenericResponseEnvelope} @@ -14,34 +9,3 @@ final case class GalaxyServiceResponse(channel: String, reply: EventResponse) extends GenericResponseEnvelope { 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 -}