diff --git a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala index be5f3df92..f2533250f 100644 --- a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala +++ b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala @@ -40,7 +40,7 @@ import net.psforever.util.{Config, DiffieHellman, Md5Mac} * Various subroutines are used to keep track of the predicted offending packets.
*
* The cryptographic aspect of the service resolves itself first, - * exchanging keys and passcodes and challeneges between local and the network. + * exchanging keys and passcodes and challenges between local and the network. * Most of this process occurs without any prior cryptographic setup, * relying on the validation of its own exchange to operate. * Afterwards its completion, @@ -58,7 +58,7 @@ import net.psforever.util.{Config, DiffieHellman, Md5Mac} * and will respond to those requests if possible by searching its catalog.
*
* If the inbound packets do not arrive correctly the first time, - * after a while, requests for identified mising packets from the network source will occur. + * after a while, requests for identified missing packets from the network source will occur. * Virtually all important packets have a sequence number that bestows on each packet an absolute delivery order. * Bundled packets have a subslot number that indicates the total number of subslot packets dispatched to this client * as well as the order in which the packets should have been received. @@ -66,14 +66,13 @@ import net.psforever.util.{Config, DiffieHellman, Md5Mac} * Should the expected packets show up out of order before the buffered is cleared, * everything sorts itself out. * Unresolved missing sequence entries will often lead to requests for missing packets with anticipated subslots. - * If these requests do not resolve, there is unfortuantely not much that can be done except grin and bear with it. + * If these requests do not resolve, there is unfortunately not much that can be done except grin and bear with it. */ object MiddlewareActor { Security.addProvider(new BouncyCastleProvider) /** Maximum packet size in bytes */ - //final val MTU: Int = 467 - final val MTU: Int = 440 + final val MTU: Int = 440 //467 def apply( socket: ActorRef[Udp.Command], @@ -835,7 +834,7 @@ class MiddlewareActor( inReorderQueueFunc = processInReorderQueueTimeoutOnly in(p) } - retimePacketProcessorIfNotRunning() + retimePacketProcessorIfNotRunningIfWork() } /** @@ -864,6 +863,7 @@ class MiddlewareActor( */ private def inReorderQueueTest(): Unit = { if (inReorderQueue.isEmpty) { + timesInReorderQueue = 0 inReorderQueueFunc = doNothing activeSequenceFunc = activeNormal log.trace("normalcy with packet sequence; resuming normal workflow") @@ -1036,7 +1036,7 @@ class MiddlewareActor( private def sendFirstBundle(): Unit = { lastOutboundEventTime = System.currentTimeMillis() send(outQueueBundled.dequeue(), Some(nextSequence), crypto) - retimePacketProcessorIfWork() + retimePacketProcessorIfNotRunningIfWork() } private def send(packet: PlanetSideControlPacket): ByteVector = { @@ -1080,12 +1080,23 @@ class MiddlewareActor( * test if there are any packets waiting in certain messaging queues * for the chance to cancel, then restart, the timer for processing outbound packets. */ - private def retimePacketProcessorIfNotRunning(): Unit = { + private def retimePacketProcessorIfNotRunningIfWork(): Unit = { if (packetProcessor == Default.Cancellable || packetProcessor.isCancelled) { retimePacketProcessorIfWork() } } + /** + * If the timer the timer for processing outbound packets is not currently running, + * test if there are any packets waiting in certain messaging queues + * for the chance to cancel, then restart, the timer for processing outbound packets. + */ + private def retimePacketProcessorIfNotRunning(): Unit = { + if (packetProcessor == Default.Cancellable || packetProcessor.isCancelled) { + retimePacketProcessor() + } + } + /** * If there are any packets waiting in the following queues, * cancel, then restart, the timer for processing outbound packets. diff --git a/src/main/scala/net/psforever/objects/zones/blockmap/BlockMap.scala b/src/main/scala/net/psforever/objects/zones/blockmap/BlockMap.scala index f63a10c7a..b6c91ec95 100644 --- a/src/main/scala/net/psforever/objects/zones/blockmap/BlockMap.scala +++ b/src/main/scala/net/psforever/objects/zones/blockmap/BlockMap.scala @@ -516,7 +516,8 @@ object BlockMap { structure: Iterable[Sector] ): Iterable[Sector] = { if (list.max < structure.size) { - list.toSet.map { structure.toSeq } + val structureSeq = structure.toSeq + list.toSet.map { structureSeq } } else { List[Sector]() }