X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXSubprocess.pm;h=6ff5adae1bbba143f2531007359e19bd31ed9a09;hb=c30a89a0f34e861b9eb136c07ff4ea5ed9a460a0;hp=44427621714da6251c72beb2ac3eb963c24efbc0;hpb=0309cb55ee4d6ee5a8d68792d945c429d16c09bd;p=spider.git diff --git a/perl/DXSubprocess.pm b/perl/DXSubprocess.pm index 44427621..6ff5adae 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 q{[null, ""]}; + } + + return [undef, [1]] unless $j; + eval { $r = decode_json($j) }; + if ($@) { + LogDbg('DXUser', "DXSubcommand::thaw: json error on '$j': $@"); + $r = qq{[$@,[1]]}; + } + return $r; +} +1; + +