X-Git-Url: http://git.rot13.org/?p=safeq;a=blobdiff_plain;f=terminal-server.pl;h=6ea1a23ba3831c683d7045a91e81b5f7f42e6f0b;hp=6d86992044c021fda288790f6fd01df2e87c28e9;hb=83e782d4a74a6638bb9d70c9e55d0da3f090ae85;hpb=ff9d62a22d0cc94027535c6a8d9870675f85653b diff --git a/terminal-server.pl b/terminal-server.pl index 6d86992..6ea1a23 100755 --- a/terminal-server.pl +++ b/terminal-server.pl @@ -1,6 +1,7 @@ #!/usr/bin/perl use warnings; use strict; +use autodie; use Data::Dump qw(dump); @@ -60,8 +61,12 @@ while(1) { $line = <$client_socket>; } - $line =~ s/[\r\n]+$//; - warn "<< $line\n"; + if ( defined $line ) { + $line =~ s/[\r\n]+$//; + warn "<< $line\n"; + } else { + warn "<< NULL ", $client_socket->connected ? '' : 'NOT ', "connected"; + } return $line; } @@ -84,6 +89,7 @@ while(1) { while ($client_socket->connected) { my $line = client_line; + last if ! defined $line; if ( $line =~ m/^\.SQ ([\d\.]+) (\S+)/ ) { my ($version,$serial) = ($1,$2); @@ -120,33 +126,86 @@ while(1) { $total_charged += $charge; $total_pages++; client_send ".CREDIT ".credit; - client_send ".COPY 1"; # I verified that you are allowed to copy 1 page? + client_send ".COPY $total_pages"; # page copied client_send ".NOP"; } elsif ( $line =~ m/\.ACTION LIST/ ) { + + client_send "2"; # nr of items in list + # status: 0 - pendng/3 - printed + # | pages + # | | title + # | | | queue + client_send "3|1|Koha online catalog|XWC7232"; + client_send "0|1|Koha online catalog|XWC5225"; # FIXME - } elsif ( $line =~ m/\.ACTION PRINT ALL/ ) { + } elsif ( $line =~ m/\.ACTION PRINT (ALL|\d+)/ ) { + my $what = $1; + my $job = $1 if $1 =~ m/^\d+$/; # 0 means print all? + + my $charge = $prices->{'A4'} || die "no A4 price"; + + my $nr_jobs = 2; + + if ( $nr_jobs == 0 ) { + client_send ".ACTION NOJOB Nema se Å¡ta tiskat"; + next; + } + # FIXME + warn "FIXME $line\n"; + client_send ".ACTION PRINT"; # device locked from terminal screen? + + # check if printer ready + my $printer_ready = 0; + if ( ! $printer_ready ) { + client_send ".WARN 1/1|The printer is not ready|job has been suspended ... (1x)"; + next; + } + + my $send = 0; # 0 .. 100 + my $printed = 0; # 0 .. nr pages + + # total pages in batch + # | page/batch + # | | title + # | | | + client_send ".PRINT 1|1/1|Microsoft Word - molba_opca"; + client_send ".NOP S $send C 0"; + + # open 10.60.3.25:9100 + $send = 100; + + client_send ".NOP S $send C 0"; + client_send ".MSG Please check display of device" if $send == 100; + + # check smtp counters to be sure page is printed + + $credit -= $charge; + $total_charged += $charge; + $total_pages++; + + client_send ".DONE $nr_jobs $total_pages ".credit($total_charged); } elsif ( $line =~ m/^\.NOP/ ) { # XXX it's important to sleep, before sending response or # interface on terminal device will be unresponsive $next_nop_t = time() + 5; # NOP every 5s? } elsif ( $line =~ m/^\.END/ ) { - client_send ".DONE BLK WAIT"; - client_send ".NOP"; - my $nop = client_line; + client_send ".DONE BLK WAIT"; + client_send ".NOP"; + my $nr_jobs = 0; # FIXME client_send ".DONE $total_pages ".credit($total_charged); - warn "expected NOP got: $nop" unless $nop =~ m/NOP/; - my $null = client_line; - $client_socket->close; - } else { +# $client_socket->close; + } elsif (defined $line) { warn "UNKNOWN: ",dump($line); print "Response>"; my $r = ; chomp $r; client_send $r; + } else { + warn "NULL line ", $client_socket->connected ? '' : 'NOT ', "connected"; } } warn "# return to accept";