Fixed rack internal connectable <-> connectable comms.

This commit is contained in:
Florian Nücke 2015-12-25 20:28:03 +01:00
parent 1bc4695933
commit e1494e9224

View File

@ -177,25 +177,52 @@ class Rack extends traits.PowerAcceptor with traits.Hub with traits.PowerBalance
override def onMessage(message: Message): Unit = { override def onMessage(message: Message): Unit = {
super.onMessage(message) super.onMessage(message)
if (message.name == "network.message") message.data match { if (message.name == "network.message") message.data match {
case Array(packet: Packet) => case Array(packet: Packet) => relayIfMessageFromConnectable(message, packet)
for (slot <- 0 until getSizeInventory) { case _ =>
val mapping = nodeMapping(slot) }
for (connectableIndex <- 0 until 3) { }
mapping(connectableIndex + 1) match {
case Some(side) => private def relayIfMessageFromConnectable(message: Message, packet: Packet): Unit = {
val mountable = getMountable(slot) for (slot <- 0 until getSizeInventory) {
if (mountable != null && connectableIndex < mountable.getConnectableCount) { val mountable = getMountable(slot)
val connectable = mountable.getConnectableAt(connectableIndex) if (mountable != null) {
if (connectable != null && connectable.node == message.source) { val mapping = nodeMapping(slot)
sidedNode(toGlobal(side)).sendToReachable("network.message", packet) for (connectableIndex <- 0 until 3) {
return mapping(connectableIndex + 1) match {
} case Some(side) =>
if (connectableIndex < mountable.getConnectableCount) {
val connectable = mountable.getConnectableAt(connectableIndex)
if (connectable != null && connectable.node == message.source) {
sidedNode(toGlobal(side)).sendToReachable("network.message", packet)
relayToConnectablesOnSide(message, packet, side)
return
} }
case _ => // Not connected to a bus. }
} case _ => // Not connected to a bus.
} }
} }
case _ => }
}
}
private def relayToConnectablesOnSide(message: Message, packet: Packet, sourceSide: ForgeDirection): Unit = {
for (slot <- 0 until getSizeInventory) {
val mountable = getMountable(slot)
if (mountable != null) {
val mapping = nodeMapping(slot)
for (connectableIndex <- 0 until 3) {
mapping(connectableIndex + 1) match {
case Some(side) if side == sourceSide =>
if (connectableIndex < mountable.getConnectableCount) {
val connectable = mountable.getConnectableAt(connectableIndex)
if (connectable != null && connectable.node != message.source) {
snifferNodes(slot)(connectableIndex).sendToNeighbors("network.message", packet)
}
}
case _ => // Not connected to a bus.
}
}
}
} }
} }