funnel wake-on-lan start through host, not direct

The network card's wake-on-lan previously was sending a computer.start
message directly to the machine. But some hosts, specifically the Drone
need to make certain start actions before the machine starts. For
instance, the drone zeros its velocity (technically, it rises by .5m)

closes #2866
This commit is contained in:
payonel 2018-09-28 13:15:03 -07:00
parent d350b30e9c
commit 8a9740b641
2 changed files with 19 additions and 12 deletions

View File

@ -164,7 +164,13 @@ class Drone(val world: World) extends Entity(world) with MachineHost with intern
override def isPaused = machine.isPaused
override def start() = machine.start()
override def start(): Boolean = {
if (world.isRemote || machine.isRunning) {
return false
}
preparePowerUp()
machine.start()
}
override def pause(seconds: Double) = machine.pause(seconds)
@ -474,7 +480,6 @@ class Drone(val world: World) extends Entity(world) with MachineHost with intern
}
}
else if (!world.isRemote && !machine.isRunning) {
preparePowerUp()
start()
}
}

View File

@ -176,16 +176,18 @@ class NetworkCard(val host: EnvironmentHost) extends prefab.ManagedEnvironment w
}
// Accept wake-up messages regardless of port because we close all ports
// when our computer shuts down.
packet.data match {
case Array(message: Array[Byte]) if wakeMessage.contains(new String(message, Charsets.UTF_8)) =>
node.sendToNeighbors("computer.start")
case Array(message: String) if wakeMessage.contains(message) =>
node.sendToNeighbors("computer.start")
case Array(message: Array[Byte], _*) if wakeMessageFuzzy && wakeMessage.contains(new String(message, Charsets.UTF_8)) =>
node.sendToNeighbors("computer.start")
case Array(message: String, _*) if wakeMessageFuzzy && wakeMessage.contains(message) =>
node.sendToNeighbors("computer.start")
case _ =>
val wakeup: Boolean = packet.data match {
case Array(message: Array[Byte]) if wakeMessage.contains(new String(message, Charsets.UTF_8)) => true
case Array(message: String) if wakeMessage.contains(message) => true
case Array(message: Array[Byte], _*) if wakeMessageFuzzy && wakeMessage.contains(new String(message, Charsets.UTF_8)) => true
case Array(message: String, _*) if wakeMessageFuzzy && wakeMessage.contains(message) => true
case _ => false
}
if (wakeup) {
host match {
case ctx: Context => ctx.start()
case _ => node.sendToNeighbors("computer.start")
}
}
}
}