Преглед изворни кода

Randomize change intervals

Zachary Kotlarek пре 11 година
родитељ
комит
13643f0d89
1 измењених фајлова са 35 додато и 7 уклоњено
  1. 35 7
      dmx/rumbleCtl.pl

+ 35 - 7
dmx/rumbleCtl.pl

@@ -11,13 +11,14 @@ use lib dirname(abs_path($0));
 use DMX;
 use DMX;
 
 
 # App config
 # App config
-my $DATA_DIR     = DMX::dataDir();
-my $STATE_SOCK   = 'RUMBLE_CTL';
-my $OUT_SOCK     = 'RUMBLE';
-my $OUTPUT_FILE  = $DATA_DIR . $STATE_SOCK;
-my $PUSH_TIMEOUT = 20;
-my $PULL_TIMEOUT = $PUSH_TIMEOUT * 3;
-my $DELAY        = 1;
+my $DATA_DIR      = DMX::dataDir();
+my $STATE_SOCK    = 'RUMBLE_CTL';
+my $OUT_SOCK      = 'RUMBLE';
+my $OUTPUT_FILE   = $DATA_DIR . $STATE_SOCK;
+my $PUSH_TIMEOUT  = 20;
+my $PULL_TIMEOUT  = $PUSH_TIMEOUT * 3;
+my $DELAY         = 1;
+my $RAND_MAX_INT  = 30;
 
 
 # Debug
 # Debug
 my $DEBUG = 0;
 my $DEBUG = 0;
@@ -38,6 +39,7 @@ my $pushLast  = 0;
 my $pullLast  = time();
 my $pullLast  = time();
 my $update    = 0;
 my $update    = 0;
 my $stateEnd  = 0;
 my $stateEnd  = 0;
+my $bumpNext  = 0;
 
 
 # Loop forever
 # Loop forever
 while (1) {
 while (1) {
@@ -73,6 +75,7 @@ while (1) {
 			$delay = int(rand($exists{'RUMBLE_DELAY_MAX'} - $delay)) + $delay;
 			$delay = int(rand($exists{'RUMBLE_DELAY_MAX'} - $delay)) + $delay;
 		}
 		}
 		$stateEnd = $now + $delay;
 		$stateEnd = $now + $delay;
+		$bumpNext = 0;
 
 
 		# Set the state
 		# Set the state
 		$state = 'OFF';
 		$state = 'OFF';
@@ -95,6 +98,31 @@ while (1) {
 		$update = 1;
 		$update = 1;
 	}
 	}
 
 
+	# Re-send the same command at randomized intervals based on user delay settings
+	if ($bumpNext <= $now) {
+		if ($DEBUG) {
+			print STDERR "Bumping\n";
+		}
+
+		my $max = $RAND_MAX_INT;
+		if ($exists{'RUMBLE_DELAY_MAX'} &&
+			$exists{'RUMBLE_DELAY_MAX'} < $RAND_MAX_INT &&
+			$exists{'RUMBLE_DELAY_MAX'} > 1) {
+				$max = int($exists{'RUMBLE_DELAY_MAX'});
+		}
+		my $min = 1;
+		if ($exists{'RUMBLE_DELAY_MIN'}) {
+			$min = int($exists{'RUMBLE_DELAY_MIN'} / 4);
+		}
+		if ($min > $max) {
+			$min = $max;
+		}
+
+		$bumpNext = int(rand($max - $min)) + $min - int(rand($min));
+		$bumpNext += $now;
+		$update = 1;
+	}
+
 	# Force updates on any state change
 	# Force updates on any state change
 	if (!$update && $stateLast ne $state) {
 	if (!$update && $stateLast ne $state) {
 		if ($DEBUG) {
 		if ($DEBUG) {