summaryrefslogtreecommitdiffstats
path: root/abs/mv-core/ghosd/osdServer.pl
diff options
context:
space:
mode:
authorJames Meyer <james.meyer@operamail.com>2008-11-09 02:33:06 (GMT)
committerJames Meyer <james.meyer@operamail.com>2008-11-09 02:33:06 (GMT)
commit1ba69cc033dfbd0a6c4c29c6d877c7e753f96e8e (patch)
treef336ee91ce16c6591fff50340562e07e15aa1a55 /abs/mv-core/ghosd/osdServer.pl
parent75b1bceb21faab32d8f519d6f7f7062a226f9047 (diff)
downloadlinhes_pkgbuild-1ba69cc033dfbd0a6c4c29c6d877c7e753f96e8e.zip
linhes_pkgbuild-1ba69cc033dfbd0a6c4c29c6d877c7e753f96e8e.tar.gz
linhes_pkgbuild-1ba69cc033dfbd0a6c4c29c6d877c7e753f96e8e.tar.bz2
MythVantage specific pkgs
Diffstat (limited to 'abs/mv-core/ghosd/osdServer.pl')
-rwxr-xr-xabs/mv-core/ghosd/osdServer.pl189
1 files changed, 189 insertions, 0 deletions
diff --git a/abs/mv-core/ghosd/osdServer.pl b/abs/mv-core/ghosd/osdServer.pl
new file mode 100755
index 0000000..8cd62b7
--- /dev/null
+++ b/abs/mv-core/ghosd/osdServer.pl
@@ -0,0 +1,189 @@
+#!/usr/bin/perl -w
+# osdServer.pl - process incoming text events based on keyword matching and
+# display using Ghosd
+use strict;
+use FileHandle;
+use Socket;
+use Thread;
+use Config;
+use Thread qw(async);
+
+if( @ARGV != 1 ){ die "specify a port to listen on " }
+my %osdHash = ();
+my $proto = "";
+my $port = "";
+my $port1 = "";
+my $sockAddr = "";
+my $sockAddr1= "";
+my $fullCmd = "";
+my $fullCmd1 = "";
+
+# readKeyWordFile reads type, keywords, (text/image) parameters
+# text parameters:
+# X coordinate, Y coordinate, red, green, blue, font size, fade In, fade Out
+# image parameters:
+# image filename, X coordinate, Y coordinate
+# osdServer.confg format is: type _#_ keywords _#_ osd parameters
+sub readOsdFile
+{
+ open(OSDFILE,"/etc/osdServer.config") or die "no osdServer.config file: $!";
+
+ while(<OSDFILE>){
+
+ # ignore comment lines
+ if( !/^#/ ){
+ chomp($_);
+ my @arrLine = split "_#_";
+ $arrLine[0] =~ s/ //g;
+ $osdHash{ lc($arrLine[0]) }{ $arrLine[1] } = $arrLine[2];
+ }#if not a comment line
+
+ }#for each line in file
+
+ close(OSDFILE);
+
+}#readOsdFile
+
+sub matchWords
+{
+ my $msgString = $_[0];
+ my $type = $_[1];
+# print "msgstring $msgString \n";
+
+ # print "type $type\n " ;
+ # for the type specified
+ for my $kwList ( keys %{ $osdHash{$type} } )
+ {
+ # for each word
+ for my $checkWord ( split " ", $kwList )
+ {
+ $checkWord =~ s/ //g;
+ if( $msgString =~ /$checkWord/i )
+ {
+ if( $type eq "text" )
+ {
+ $fullCmd .= qq{./text '$msgString' $osdHash{text}{$kwList} &};
+
+ #print "$fullCmd\n";
+ }else
+ {
+ my @realstring = split(/:::/, $msgString);
+ print "$realstring[0] \n";
+ $fullCmd .= qq{/usr/bin/imageGhosd -i $osdHash{image}{$kwList} '$realstring[0]' &};
+# print "full $fullCmd\n";
+ #print "msgstring- $msgString \n";
+ }
+ }#if matching word
+ }#for each check word
+ }#for each key word list
+
+}#checkText
+
+sub matchWords1
+{
+ my $msgString = $_[0];
+ my $type = $_[1];
+# print "msgstring $msgString \n";
+ print "Here ia m" ;
+ # print "type $type\n " ;
+ # for the type specified
+ for my $kwList ( keys %{ $osdHash{$type} } )
+ {
+ # for each word
+ for my $checkWord ( split " ", $kwList )
+ {
+ $checkWord =~ s/ //g;
+ if( $msgString =~ /$checkWord/i )
+ {
+ if( $type eq "text" )
+ {
+ $fullCmd1 .= qq{./text '$msgString' $osdHash{text}{$kwList} &};
+
+ #print "$fullCmd\n";
+ }else
+ {
+ my @realstring = split(/:::/, $msgString);
+ print "$realstring[0] \n";
+ $fullCmd1 .= qq{/usr/bin/imageGhosd -i $osdHash{image}{$kwList} '$realstring[0]' &};
+ print "full $fullCmd1\n";
+ #print "msgstring- $msgString \n";
+ }
+ }#if matching word
+ }#for each check word
+ }#for each key word list
+}
+
+sub sub1 {
+ while( 1 )
+ {
+ my $acceptSock1 = accept(HANDLER, SERVER1) or die "accept: $!\n";
+ my($acceptPort1, $acceptIpAddr) = sockaddr_in($acceptSock1);
+
+ autoflush HANDLER 1;
+ while(my $msgString1 = <HANDLER>)
+ {
+ chomp($msgString1);
+ matchWords1($msgString1,"text");
+ matchWords1($msgString1,"image");
+
+ $fullCmd1 = `$fullCmd1` unless $fullCmd1 eq "";
+ $fullCmd1 = "";
+ }#while handler
+
+ close HANDLER or die "close HANDLER: $!\n";
+ }#while forever
+}
+
+# begin main program
+
+readOsdFile();
+
+$proto = getprotobyname('tcp');
+socket(SERVER, PF_INET, SOCK_STREAM, $proto) or die "socket: $!\n";
+socket(SERVER1, PF_INET, SOCK_STREAM, $proto) or die "socket: $!\n";
+
+$port = $ARGV[0];
+$port1 = $port + 1;
+$port1 = 5001;
+
+$sockAddr = sockaddr_in($port, INADDR_ANY);
+$sockAddr1 = sockaddr_in($port1, INADDR_ANY);
+
+bind(SERVER, $sockAddr) or die "bind: $!\n";
+bind(SERVER1, $sockAddr1) or die "bind: $!\n";
+
+listen(SERVER, SOMAXCONN) or die "listen: $!\n";
+listen(SERVER1, SOMAXCONN) or die "listen: $!\n";
+
+
+
+$Config{usethreads} or die "Recompile Perl with threads to run this program.";
+
+my $thr = threads->new(\&sub1);
+
+
+
+
+#listen foreve
+
+while( 1 )
+{
+ my $acceptSock = accept(HANDLER, SERVER) or die "accept: $!\n";
+ my($acceptPort, $acceptIpAddr) = sockaddr_in($acceptSock);
+
+ autoflush HANDLER 1;
+ while(my $msgString = <HANDLER>)
+ {
+ chomp($msgString);
+
+ matchWords($msgString,"text");
+ matchWords($msgString,"image");
+
+ $fullCmd = `$fullCmd` unless $fullCmd eq "";
+ $fullCmd = "";
+ }#while handler
+
+ close HANDLER or die "close HANDLER: $!\n";
+
+}#while forever
+