X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=scripts%2FRFID-JSONP-server.pl;h=0428c51f59afae8a353b334de3a841c41ec9932d;hb=a1cff66f32d1ac7d8b557507acb9ea0195878192;hp=34dfaa96e4c6ed64f8504f60c96cba56ff2ea36c;hpb=1d2d499ebebdf3d44da4831568a4b512e1c5e8e0;p=Biblio-RFID.git diff --git a/scripts/RFID-JSONP-server.pl b/scripts/RFID-JSONP-server.pl index 34dfaa9..0428c51 100755 --- a/scripts/RFID-JSONP-server.pl +++ b/scripts/RFID-JSONP-server.pl @@ -15,7 +15,7 @@ use warnings; use Data::Dump qw/dump/; -use JSON; +use JSON::XS; use IO::Socket::INET; my $debug = 1; @@ -23,10 +23,12 @@ my $debug = 1; my $listen_port = 9000; # pick something not in use my $server_url = "http://localhost:$listen_port"; +my $reader = shift @ARGV; use lib 'lib'; -use RFID::Serial::3M810; -my $rfid = RFID::Serial::3M810->new; +use RFID::Biblio::RFID501; +use RFID::Biblio::Readers; +my $rfid = (RFID::Biblio::Readers->available( $reader ))[0]; # FIXME my $index_html; { @@ -68,14 +70,33 @@ sub http_server { if ( $path eq '/' ) { print $client "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n$index_html"; + } elsif ( $path =~ m{^/(examples/.+)} ) { + $path = $1; # FIXME prefix with dir for installation + my $size = -s $path; + warn "static $path $size bytes\n"; + my $content_type = 'text/plain'; + $content_type = 'application/javascript' if $path =~ /\.js/; + print $client "HTTP/1.0 200 OK\r\nContent-Type: $content_type\r\nContent-Length: $size\r\n\r\n"; + { + local $/ = undef; + open(my $fh, '<', $path) || die "can't open $path: $!"; + while(<$fh>) { + print $client $_; + } + close($fh); + } } elsif ( $method =~ m{/scan} ) { my $tags = $rfid->scan; - my $json = { - time => time(), - tags => $tags, + my $json = { time => time() }; + foreach my $tag ( keys %$tags ) { + my $hash = RFID::Biblio::RFID501->to_hash( $tags->{$tag} ); + $hash->{sid} = $tag; + $hash->{security} = uc unpack 'H*', $rfid->read_afi( $tag ); + push @{ $json->{tags} }, $hash; }; + warn "#### ", encode_json($json); print $client "HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n", - $param->{callback}, "(", to_json($json), ")\r\n"; + $param->{callback}, "(", encode_json($json), ")\r\n"; } elsif ( $method =~ m{/program} ) { my $status = 501; # Not implementd @@ -159,6 +180,15 @@ label[for=pull-reader] {