summaryrefslogtreecommitdiff
path: root/libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php
diff options
context:
space:
mode:
Diffstat (limited to 'libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php')
-rw-r--r--libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php55
1 files changed, 55 insertions, 0 deletions
diff --git a/libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php b/libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php
new file mode 100644
index 00000000..c0fc776e
--- /dev/null
+++ b/libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace JsonRPC\Request;
+
+/**
+ * Class BatchRequestParser
+ *
+ * @package JsonRPC\Request
+ * @author Frederic Guillot
+ */
+class BatchRequestParser extends RequestParser
+{
+ /**
+ * Parse incoming request
+ *
+ * @access public
+ * @return string
+ */
+ public function parse()
+ {
+ $responses = array();
+
+ foreach ($this->payload as $payload) {
+ $responses[] = RequestParser::create()
+ ->withPayload($payload)
+ ->withProcedureHandler($this->procedureHandler)
+ ->withMiddlewareHandler($this->middlewareHandler)
+ ->withLocalException($this->localExceptions)
+ ->parse();
+ }
+
+ $responses = array_filter($responses);
+ return empty($responses) ? '' : '['.implode(',', $responses).']';
+ }
+
+ /**
+ * Return true if we have a batch request
+ *
+ * ex : [
+ * 0 => '...',
+ * 1 => '...',
+ * 2 => '...',
+ * 3 => '...',
+ * ]
+ *
+ * @static
+ * @access public
+ * @param array $payload
+ * @return bool
+ */
+ public static function isBatchRequest(array $payload)
+ {
+ return array_keys($payload) === range(0, count($payload) - 1);
+ }
+}