Procházet zdrojové kódy

Use the new speach socket

Zachary Kotlarek před 12 roky
rodič
revize
ee21938f36
1 změnil soubory, kde provedl 6 přidání a 24 odebrání
  1. 6 24
      dmx/DMX.pm

+ 6 - 24
dmx/DMX.pm

@@ -23,6 +23,7 @@ chomp($TEMP_DIR);
 my $DATA_DIR    = $TEMP_DIR . 'plexMonitor/';
 my $DATA_DIR    = $TEMP_DIR . 'plexMonitor/';
 my $DMX_SOCK    = 'DMX';
 my $DMX_SOCK    = 'DMX';
 my $SUB_SOCK    = 'STATE';
 my $SUB_SOCK    = 'STATE';
+my $SPEAK_SOCK  = undef();
 my %CHANNEL_ADJ = (
 my %CHANNEL_ADJ = (
 	'13' => 1.00,
 	'13' => 1.00,
 	'14' => 1.14,
 	'14' => 1.14,
@@ -37,7 +38,6 @@ if (!-d $DATA_DIR) {
 # State
 # State
 my $DMX_FH = undef();
 my $DMX_FH = undef();
 my $SELECT = undef();
 my $SELECT = undef();
-my %SAY    = ();
 
 
 # Data directory
 # Data directory
 sub dataDir() {
 sub dataDir() {
@@ -254,9 +254,6 @@ sub readState($$$$) {
 	my ($delay, $exists, $mtime, $valid) = @_;
 	my ($delay, $exists, $mtime, $valid) = @_;
 	my $cmdState = undef();
 	my $cmdState = undef();
 
 
-	# Cleanup previous say calls
-	sayCleanup();
-
 	# Wait for state updates
 	# Wait for state updates
 	my @ready_clients = $SELECT->can_read($delay);
 	my @ready_clients = $SELECT->can_read($delay);
 	foreach my $fh (@ready_clients) {
 	foreach my $fh (@ready_clients) {
@@ -313,14 +310,6 @@ sub readState($$$$) {
 	return $cmdState;
 	return $cmdState;
 }
 }
 
 
-# Reap zombie children
-sub sayCleanup() {
-	foreach my $pid (keys(%SAY)) {
-		waitpid($pid, POSIX::WNOHANG);
-		delete($SAY{$pid});
-	}
-}
-
 # Speak
 # Speak
 sub say($) {
 sub say($) {
 	my ($str) = @_;
 	my ($str) = @_;
@@ -328,19 +317,12 @@ sub say($) {
 		print STDERR 'Say: ' . $str . "\n";
 		print STDERR 'Say: ' . $str . "\n";
 	}
 	}
 
 
-	# Cleanup previous say calls
-	sayCleanup();
-
-	# Fork and speak in the background
-	my $pid = fork();
-	if (!defined($pid)) {
-		die('Unable to fork: ' . $! . "\n");
-	}
-	if (!$pid) {
-		exec('say', $str);
-	} else {
-		$SAY{$pid} = 1;
+	if (!$SPEAK_SOCK) {
+		$SPEAK_SOCK = DMX::clientSock('SPEAK');
 	}
 	}
+
+	$SPEAK_SOCK->send($str)
+	  or die('Unable to write command to socket: SPEAK: ' . $str . ": ${!}\n");
 }
 }
 
 
 # Always return true
 # Always return true