#!/usr/local/bin/perl

# Turkish morphology wrapper by Erik Peterson, eepeter@cs.cmu.edu
# Using programs from Kemal
# Sept 13, 2007

## Change these to suit local environment
$cp = "TMServer";

use IPC::Open2;

use IO::Socket::INET;
use Net::hostent;
use FileHandle;

use POSIX ":sys_wait_h";

my($tmread, $tmwrite);
$pid = open2($tmread, $tmwrite, "java AvenueMorphologyServer");
$prompt = <$tmread>;

#$ENV{'CLASSPATH'} = "$jardir:" . $ENV{'CLASSPATH'};

# Default server port number is 5780; 
$serverport = 5780;
# Include port number as argument if want different port
if (scalar(@ARGV) == 1 and $ARGV[0] =~ m/^\d+$/) {
    $serverport = $ARGV[0];
}

$| = 1;

# Open server port
$server = IO::Socket::INET->new(LocalPort => $serverport,
				Type => SOCK_STREAM,
				Reuse => 1,
				Listen => 12)
    or die "Couldn't be a tcp server on port $serverport: $!\n";

print "Starting Turkish morphology server on port $serverport\n\n";

# For Cygwin
$SIG{CHLD} = 'IGNORE';

# For Linux
#$SIG{CHLD} = sub { wait };

#$morphinited = 0;


# Wait for connections
while ($client = $server->accept()) {
    if ($kidpid = fork) {
	close $client;
	next;
    }

    defined($kidpid) or die "cannot fork: $!";

    close $server;

    print "[Connection established]\n";

    # Read Turkish sentence
    while ($sent = <$client>) {
	if (uc($sent) =~ m/^\*\*EXIT\*\*/i) {
	    last;
	}
	#print "Processing $sent";

	print $tmwrite $sent;
	$fss = <$tmread>;
	$prompt = <$tmread>;

        # Send feature structures back to xfer engine
	$fss =~ s/[\r\n]*$/ /;
	$fss =~ s/\( LEX /\( lex /;
	$fss =~ s/\( POS /\( pos /;

	#print "Returning $fss\n";

        print $client "$fss\n";

    }

    print "[Connection closed]\n";
    close($client);
    exit;
}

close($server);
