mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-06-25 06:44:19 +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
|
||||
}
|
||||
|
||||
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 => ()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
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")
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue