You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by wa...@apache.org on 2019/12/11 14:39:32 UTC

[dubbo-php-framework] 18/31: update

This is an automated email from the ASF dual-hosted git repository.

wangxin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-php-framework.git

commit 07c8555cdc4e7b06d7047bfe370d70c533bd3ff8
Author: wangjinxi <wa...@che001.com>
AuthorDate: Thu Jun 20 16:03:33 2019 +0800

    update
---
 common/protocol/fsof/DubboParser.php | 79 ++++++++++++++++++++++--------------
 1 file changed, 49 insertions(+), 30 deletions(-)

diff --git a/common/protocol/fsof/DubboParser.php b/common/protocol/fsof/DubboParser.php
index f820851..7dbba4f 100644
--- a/common/protocol/fsof/DubboParser.php
+++ b/common/protocol/fsof/DubboParser.php
@@ -191,45 +191,64 @@ class DubboParser
 
     public function parseResponseBody(DubboResponse $response)
     {
-        $_data = substr($response->getFullData(), self::PACKAGE_HEDA_LEN);
-        $response->setResponseBody($_data);
         if (DubboResponse::OK == $response->getStatus()) {
             if (self::DUBBO_PROTOCOL_SERIALIZE_FAST_JSON == $response->getSerialization()) {
-                list($status, $content) = explode(PHP_EOL, $_data);
-                switch ($status) {
-                    case self::RESPONSE_NULL_VALUE:
-                        break;
-                    case self::RESPONSE_VALUE:
-                        $response->setResult(json_decode($content, true));
-                        break;
-                    case self::RESPONSE_WITH_EXCEPTION:
-                        $exception = json_decode($content, true);
-                        if (is_array($exception) && array_key_exists('message', $exception)) {
-                            throw new \Exception($exception['message']);
-                        } else if (is_string($exception)) {
-                            throw new \Exception($exception);
-                        } else {
-                            throw new \Exception("provider occur error");
-                        }
-                        break;
-                    default:
-                        return false;
-                }
+                $this->parseResponseBodyForFastjson($response);
             } else if (self::DUBBO_PROTOCOL_SERIALIZE_HESSIAN2 == $response->getSerialization()) {
-                $_data = substr($_data, 1);
-                $hess_stream = new \HessianStream($_data);
-                $hess_options = new \HessianOptions();
-                $hess_factory = new \HessianFactory();
-                $parser = $hess_factory->getParser($hess_stream, $hess_options);
-                $content = $parser->parseReply();
-                $response->setResult($content);
+                $this->parseResponseBodyForHessian2($response);
+            } else {
+                throw new \Exception(sprintf('返回的序列化类型:(%s), 不支持解析!', $response->getSerialization()));
             }
         } else {
-            throw new \Exception($_data);
+            throw new \Exception($response->getFullData());
+        }
+        return $response;
+    }
+
+    private function parseResponseBodyForFastjson(DubboResponse $response)
+    {
+        $_data = substr($response->getFullData(), self::PACKAGE_HEDA_LEN);
+        $response->setResponseBody($_data);
+        list($status, $content) = explode(PHP_EOL, $_data);
+        if ($response->isHeartbeatEvent()) {
+            $response->setResult(json_decode($status, true));
+        } else {
+            switch ($status) {
+                case self::RESPONSE_NULL_VALUE:
+                    break;
+                case self::RESPONSE_VALUE:
+                    $response->setResult(json_decode($content, true));
+                    break;
+                case self::RESPONSE_WITH_EXCEPTION:
+                    $exception = json_decode($content, true);
+                    if (is_array($exception) && array_key_exists('message', $exception)) {
+                        throw new \Exception($exception['message']);
+                    } else if (is_string($exception)) {
+                        throw new \Exception($exception);
+                    } else {
+                        throw new \Exception("provider occur error");
+                    }
+                    break;
+                default:
+                    return false;
+            }
         }
         return $response;
     }
 
+    private function parseResponseBodyForHessian2(DubboResponse $response)
+    {
+        $_data = substr($response->getFullData(), self::PACKAGE_HEDA_LEN + 1);
+        $response->setResponseBody($_data);
+        $hess_stream = new \HessianStream($_data);
+        $hess_options = new \HessianOptions();
+        $hess_factory = new \HessianFactory();
+        $parser = $hess_factory->getParser($hess_stream, $hess_options);
+        $content = $parser->parseReply();
+        $response->setResult($content);
+        return $response;
+    }
+
 
     public function parseRequestHeader(DubboRequest &$request)
     {