X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXSubprocess.pm;h=e9624c7d8da4bebd0c961e7563f2ea084add4813;hb=refs%2Fheads%2Fnewusers;hp=44427621714da6251c72beb2ac3eb963c24efbc0;hpb=fd533381ad4e4cb991dd1b46a0be938c93bbadc7;p=spider.git diff --git a/perl/DXSubprocess.pm b/perl/DXSubprocess.pm index 44427621..e9624c7d 100644 --- a/perl/DXSubprocess.pm +++ b/perl/DXSubprocess.pm @@ -8,6 +8,7 @@ package DXSubprocess; use DXUtil; use DXDebug; +use DXLog; use Mojo::IOLoop; use Mojo::IOLoop::Subprocess; use JSON; @@ -18,6 +19,45 @@ sub new { my $pkg = shift; my $class = ref $pkg || __PACKAGE__; - my $ref = Mojo::IOLoop::Subprocess->new->serialize(\&encode_json)->deserialize(\&decode_json); + my $ref = Mojo::IOLoop::Subprocess->new->serialize(\&freeze)->deserialize(\&thaw); return bless $ref, $class; } + +sub freeze +{ + my $r; + my $j = shift; + unless ($j) { + LogDbg('DXUser', "DXSubcommand::freeze: undefined or empty input"); + return q{[null, '']}; + } + + eval { $r = encode_json($j) }; + if ($@) { + my $dd = dd($j); + LogDbg('DXUser', "DXSubcommand::freeze: json error on '$dd': $@"); + $r = qq{['$@','']}; + } + return $r; +} + +sub thaw +{ + my $r; + my $j = shift; + unless ($j) { + LogDbg('DXUser', "DXSubcommand::thaw: empty string on input"); + return [undef,[0]]; + } + + return [undef, [1]] unless $j; + eval { $r = decode_json($j) }; + if ($@) { + LogDbg('DXUser', "DXSubcommand::thaw: json error on '$j': $@"); + $r = [$@,[0]]; + } + return $r; +} +1; + +