Merge pull request #204 from Fate-JH/destroy-v-term

Destroy the Vehicle Terminal
This commit is contained in:
Fate-JH 2018-05-10 19:42:27 -04:00 committed by GitHub
commit 0590b575d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 64 additions and 11 deletions

View file

@ -44,6 +44,15 @@ class VehicleSpawnControl(pad : VehicleSpawnPad) extends VehicleSpawnControlBase
def FactionObject : FactionAffinity = pad
import akka.actor.SupervisorStrategy._
override val supervisorStrategy = {
import akka.actor.OneForOneStrategy
OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 10 seconds) {
case _ : akka.actor.ActorKilledException => Restart
case _ => Resume
}
}
def receive : Receive = checkBehavior.orElse {
case VehicleSpawnPad.VehicleOrder(player, vehicle) =>
trace(s"order from $player for $vehicle received")
@ -86,6 +95,20 @@ class VehicleSpawnControl(pad : VehicleSpawnPad) extends VehicleSpawnControlBase
periodicReminder.cancel
}
case VehicleSpawnControl.ProcessControl.Flush =>
if(!periodicReminder.isCancelled) {
periodicReminder.cancel
orders.foreach { VehicleSpawnControl.CancelOrder(_, Continent) }
orders = Nil
trackedOrder match {
case Some(entry) =>
VehicleSpawnControl.CancelOrder(entry, Continent)
case None => ;
}
trackedOrder = None
concealPlayer ! akka.actor.Kill //will cause the actor to restart, which will abort any trapped messages
}
case _ => ;
}
@ -127,7 +150,8 @@ object VehicleSpawnControl {
object ProcessControl extends Enumeration {
val
Reminder,
GetNewOrder
GetNewOrder,
Flush
= Value
}
/**
@ -232,6 +256,27 @@ object VehicleSpawnControl {
VehicleSpawnControl.recursiveBlockedReminder(recipients.iterator, wrecked)
}
/**
* Cancel this vehicle order and inform the person who made it, if possible.
* @param entry the order being cancelled
* @param zone the continent on which the vehicle was registered
* @param context an `ActorContext` object for which to create the `TaskResolver` object
*/
def CancelOrder(entry : VehicleSpawnControl.Order, zone : Zone)(implicit context : ActorContext) : Unit = {
val vehicle = entry.vehicle
if(vehicle.Seats.values.count(_.isOccupied) == 0) {
if(vehicle.Actor != ActorRef.noSender) {
VehicleSpawnControl.DisposeSpawnedVehicle(entry, zone)
}
else {
VehicleSpawnControl.DisposeVehicle(entry, zone)
}
if(entry.sendTo != ActorRef.noSender) {
entry.sendTo ! VehicleSpawnPad.PeriodicReminder(VehicleSpawnPad.Reminders.Cancelled)
}
}
}
// @tailrec private final def recursiveFindOrder(iter : Iterator[VehicleSpawnControl.Order], target : ActorRef, index : Int = 0) : Option[Int] = {
// if(!iter.hasNext) {
// None

View file

@ -163,7 +163,8 @@ object VehicleSpawnPad {
object Reminders extends Enumeration {
val
Queue, //optional data is the numeric position in the queue
Blocked //optional data is a message regarding the blockage
Blocked, //optional data is a message regarding the blockage
Cancelled
= Value
}