try to fix DXSubprocess errors
[spider.git] / perl / DXSubprocess.pm
index 44427621714da6251c72beb2ac3eb963c24efbc0..6ff5adae1bbba143f2531007359e19bd31ed9a09 100644 (file)
@@ -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;
+
+