use LWP::UserAgent;
use XML::Parser;
+use Commods;
+
# $commod{'Hemp'}{Buy|Sell}{'stall'}{Stall}
# $commod{'Hemp'}{Buy|Sell}{'stall'}{Price}
# $commod{'Hemp'}{Buy|Sell}{'stall'}{Qty}
}
}
-sub bs_p_tsv ($) {
- my ($bs) = @_;
+sub bs_p_tsv ($$) {
+ my ($f, $bs) = @_;
if (exists $current->{$bs}{$stall}) {
my $si= $current->{$bs}{$stall};
- printf("\t%d\t%s", $si->{Price}, $si->{Qty}) or die $!;
+ printf($f "\t%d\t%s", $si->{Price}, $si->{Qty}) or die $!;
} else {
- printf("\t\t") or die $!;
+ printf($f "\t\t") or die $!;
}
}
-sub main__tsv () {
+sub write_tsv ($) {
+ my ($f) = @_;
foreach $commod (sort keys %commod) {
$current= $commod{$commod};
my %stalls;
map { $stalls{$_}=1; } keys %{ $current->{Buy} };
map { $stalls{$_}=1; } keys %{ $current->{Sell} };
foreach $stall (sort keys %stalls) {
- printf("%s\t%s", $commod, $stall) or die $!;
- bs_p_tsv(Buy);
- bs_p_tsv(Sell);
- print("\n") or die $!;
+ printf($f "%s\t%s", $commod, $stall) or die $!;
+ bs_p_tsv($f, Buy);
+ bs_p_tsv($f, Sell);
+ print($f "\n") or die $!;
}
}
+ $f->error and die $!;
+ $f->flush or die $!;
+}
+
+sub main__tsv () {
+ write_tsv(\*STDOUT);
}
-our (%commodmap);
our ($pctb) = $ENV{'YPPSC_PCTB_PCTB'};
our ($ua)= LWP::UserAgent->new;
-sub load_commodmap() {
- undef %commodmap;
- my $c= new IO::File "_commodmap.tsv";
- if (!$c) { $!==&ENOENT or die $!; return; }
- while (<$c>) {
- m/^(\S.*\S)\t(\d+)\n$/ or die "$_";
- $commodmap{$1}= $2;
- }
- $c->error and die $!;
- close $c;
-}
-
sub refresh_commodmap() {
die unless $pctb;
$pctb =~ s,/*$,,;
my $intag='';
my %got;
my $o= new IO::File "_commodmap.tsv.tmp",'w' or die $!;
- undef %commodmap;
+ undef %pctb_commodmap;
my $xp= new XML::Parser
(Handlers =>
my $index= $1;
$_= $got{'name'};
s/^\s+//; s/\s+$//; s/\n/ /g; s/\s+/ /;
- die "$_ ?" if exists $commodmap{$_};
- $commodmap{$_}= $index;
+ die "$_ ?" if exists $pctb_commodmap{$_};
+ $pctb_commodmap{$_}= $index;
print $o "$_\t$index\n" or die $!;
} elsif (lc $_ eq $intag) {
$got{$intag}= $cdata;
my $o= '';
foreach $commod (
- sort { $commodmap{$a} <=> $commodmap{$b} }
- grep { exists $commodmap{$_} }
+ sort { $pctb_commodmap{$a} <=> $pctb_commodmap{$b} }
+ grep { exists $pctb_commodmap{$_} }
keys %commod
) {
#print STDERR "COMMOD $commod\n";
my $l= bs_p($commod,$bs,$sortmul);
next unless @$l;
#print STDERR "COMMOD $commod has ".scalar(@$l)."\n";
- $o .= writeint($commodmap{$commod});
+ $o .= writeint($pctb_commodmap{$commod});
$o .= writeint(scalar @$l);
foreach my $cs (@$l) {
$stall= $cs->{Stall};
sub genmarketdata () {
our $version= '005b';
- load_commodmap();
- my @missing= grep { !exists $commodmap{$_} } keys %commod;
+ parse_pctb_commodmap();
+ my @missing= grep { !exists $pctb_commodmap{$_} } keys %commod;
if (@missing) {
refresh_commodmap();
refresh_newcommods();
my $missing=0;
foreach $commod (sort keys %commod) {
- next if exists $commodmap{$commod};
+ next if exists $pctb_commodmap{$commod};
if (exists $newcommods{$commod}) {
printf STDERR "Ignoring new commodity \`%s'!\n", $commod;
} else {
sub gzip ($) {
my ($raw) = @_;
- my $tf= IO::File::new_tmpfile() or die $!;
+ my $tf= pipethrough_prep();
print $tf $raw or die $!;
- $tf->flush or die $!;
- $tf->seek(0,0) or die $!;
- my $child= open GZ, "-|"; defined $child or die $!;
- if (!$child) {
- open STDIN, "<&", $tf;
- exec 'gzip'; die $!;
- }
- my $r;
- { undef $/; $!=0; $r= <GZ>; }
- defined $r or die $!;
- close GZ or die "$! $?"; die $? if $?;
- return $r;
+ return pipethrough_run($tf,undef,'gzip','gzip');
+}
+
+sub main__uploadyaarg () {
+ my %o;
+ $o{'ocean'}= $ENV{'YPPSC_OCEAN'} or die;
+ $o{'island'}= $ENV{'YPPSC_ISLAND'} or die;
+ $o{'timestamp'}= 10;
+ get_our_version(\%o, 'client');
+
+ my $tf= pipethrough_prep();
+ write_tsv($tf);
+ my $oz= pipethrough_run_gzip($tf);
+ $o{'data'}= [ undef, 'deduped.tsv.gz',
+ Content_Type => 'application/octet-stream',
+ Content => $oz ];
+
+ my $dest= $ENV{'YPPSC_YAARG_SUBMIT'};
+
+ my $respcontent= cgipostform($ua, "$dest/commod-update-receiver", \%o);
+ $respcontent =~ m/^OK\b/ or die "$respcontent ?";
}
-sub main__upload () {
+sub main__uploadpctb () {
my $ocean= $ENV{'YPPSC_OCEAN'}; die unless $ocean;
my $island= $ENV{'YPPSC_ISLAND'}; die unless $island;
die unless $pctb;