Skip to content

Commit 3b15074

Browse files
authored
Support store context when using rpc-multiplex. (#5680)
* Support store context when using `rpc-multiplex`. * Added test cases.
1 parent 09721a1 commit 3b15074

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

src/HttpMessageBuilder.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717
use Hyperf\HttpMessage\Server\Request;
1818
use Hyperf\HttpMessage\Stream\SwooleStream;
1919
use Hyperf\HttpMessage\Uri\Uri;
20+
use Hyperf\Rpc\Context as RpcContext;
2021
use Hyperf\RpcMultiplex\Contract\HttpMessageBuilderInterface;
2122
use Psr\Http\Message\ResponseInterface;
2223
use Psr\Http\Message\ServerRequestInterface;
2324
use Psr\Http\Message\UriInterface;
2425

2526
class HttpMessageBuilder implements HttpMessageBuilderInterface
2627
{
27-
public function __construct(protected PackerInterface $packer)
28+
public function __construct(protected PackerInterface $packer, protected RpcContext $context)
2829
{
2930
}
3031

@@ -38,6 +39,8 @@ public function buildRequest(array $data): ServerRequestInterface
3839

3940
$parsedData = $data[Constant::DATA] ?? [];
4041

42+
$this->context->setData($data[Constant::CONTEXT] ?? []);
43+
4144
$request = new Request('POST', $uri, ['Content-Type' => 'application/json'], new SwooleStream(Json::encode($parsedData)));
4245

4346
return $request->withParsedBody($parsedData);

tests/Cases/HttpMessageBuilderTest.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
*/
1212
namespace HyperfTest\RpcMultiplex\Cases;
1313

14+
use Hyperf\Rpc\Context;
1415
use Hyperf\RpcMultiplex\HttpMessageBuilder;
1516
use Hyperf\RpcMultiplex\Packer\JsonPacker;
1617
use Hyperf\Support\Reflection\ClassInvoker;
@@ -24,12 +25,34 @@ class HttpMessageBuilderTest extends AbstractTestCase
2425
{
2526
public function testBuildUri()
2627
{
27-
$invoker = new ClassInvoker(new HttpMessageBuilder(new JsonPacker()));
28+
$invoker = new ClassInvoker(new HttpMessageBuilder(new JsonPacker(), new Context()));
2829
/** @var UriInterface $uri */
2930
$uri = $invoker->buildUri('/', $host = uniqid(), 8806);
3031
$this->assertSame('http', $uri->getScheme());
3132
$this->assertSame('/', $uri->getPath());
3233
$this->assertSame($host, $uri->getHost());
3334
$this->assertSame(8806, $uri->getPort());
3435
}
36+
37+
public function testStoreContext()
38+
{
39+
$builder = new HttpMessageBuilder(new JsonPacker(), $context = new Context());
40+
41+
$request = $builder->buildRequest([
42+
'path' => '/',
43+
'data' => ['id' => 1],
44+
]);
45+
46+
$this->assertSame(['id' => 1], $request->getParsedBody());
47+
$this->assertSame([], $context->getData());
48+
49+
$request = $builder->buildRequest([
50+
'path' => '/',
51+
'data' => ['id' => 1],
52+
'context' => ['trace_id' => $id = uniqid()],
53+
]);
54+
55+
$this->assertSame(['id' => 1], $request->getParsedBody());
56+
$this->assertSame(['trace_id' => $id], $context->getData());
57+
}
3558
}

0 commit comments

Comments
 (0)