|
5 | 5 | #include "runtime-light/server/rpc/init-functions.h" |
6 | 6 |
|
7 | 7 | #include <algorithm> |
8 | | -#include <concepts> |
9 | 8 | #include <cstdint> |
10 | 9 | #include <string_view> |
11 | | -#include <type_traits> |
12 | 10 | #include <utility> |
13 | | -#include <variant> |
14 | 11 |
|
15 | 12 | #include "runtime-common/core/runtime-core.h" |
16 | 13 | #include "runtime-light/core/globals/php-script-globals.h" |
@@ -38,7 +35,6 @@ constexpr std::string_view RPC_EXTRA_SUPPORTED_COMPRESSION_VERSION = "RPC_EXTRA_ |
38 | 35 | constexpr std::string_view RPC_EXTRA_RANDOM_DELAY = "RPC_EXTRA_RANDOM_DELAY"; |
39 | 36 |
|
40 | 37 | void process_rpc_invoke_req_extra(const tl::rpcInvokeReqExtra& extra, PhpScriptBuiltInSuperGlobals& superglobals) noexcept { |
41 | | - superglobals.v$_SERVER.set_value(string{RPC_EXTRA_FLAGS.data(), RPC_EXTRA_FLAGS.size()}, static_cast<int64_t>(extra.flags)); |
42 | 38 | if (extra.opt_wait_binlog_pos.has_value()) { |
43 | 39 | auto wait_binlog_pos{*extra.opt_wait_binlog_pos}; |
44 | 40 | superglobals.v$_SERVER.set_value(string{RPC_EXTRA_WAIT_BINLOG_POS.data(), RPC_EXTRA_WAIT_BINLOG_POS.size()}, wait_binlog_pos.value); |
@@ -84,42 +80,30 @@ void process_rpc_invoke_req_extra(const tl::rpcInvokeReqExtra& extra, PhpScriptB |
84 | 80 |
|
85 | 81 | void process_dest_actor(const tl::rpcDestActor& dest_actor, PhpScriptBuiltInSuperGlobals& superglobals) noexcept { |
86 | 82 | superglobals.v$_SERVER.set_value(string{RPC_ACTOR_ID.data(), RPC_ACTOR_ID.size()}, dest_actor.actor_id.value); |
87 | | - RpcServerInstanceState::get().buffer.store_bytes(dest_actor.query); |
88 | 83 | } |
89 | 84 |
|
90 | 85 | void process_dest_flags(const tl::rpcDestFlags& dest_flags, PhpScriptBuiltInSuperGlobals& superglobals) noexcept { |
| 86 | + superglobals.v$_SERVER.set_value(string{RPC_EXTRA_FLAGS.data(), RPC_EXTRA_FLAGS.size()}, static_cast<int64_t>(dest_flags.flags.value)); |
91 | 87 | process_rpc_invoke_req_extra(dest_flags.extra, superglobals); |
92 | | - RpcServerInstanceState::get().buffer.store_bytes(dest_flags.query); |
93 | 88 | } |
94 | 89 |
|
95 | 90 | void process_dest_actor_flags(const tl::rpcDestActorFlags& dest_actor_flags, PhpScriptBuiltInSuperGlobals& superglobals) noexcept { |
96 | 91 | superglobals.v$_SERVER.set_value(string{RPC_ACTOR_ID.data(), RPC_ACTOR_ID.size()}, dest_actor_flags.actor_id.value); |
| 92 | + superglobals.v$_SERVER.set_value(string{RPC_EXTRA_FLAGS.data(), RPC_EXTRA_FLAGS.size()}, static_cast<int64_t>(dest_actor_flags.flags.value)); |
97 | 93 | process_rpc_invoke_req_extra(dest_actor_flags.extra, superglobals); |
98 | | - RpcServerInstanceState::get().buffer.store_bytes(dest_actor_flags.query); |
99 | | -} |
100 | | - |
101 | | -void process_no_headers(std::string_view query) noexcept { |
102 | | - RpcServerInstanceState::get().buffer.store_bytes(query); |
103 | 94 | } |
104 | 95 |
|
105 | 96 | void process_rpc_invoke_req(const tl::rpcInvokeReq& rpc_invoke_req, PhpScriptBuiltInSuperGlobals& superglobals) noexcept { |
106 | | - std::visit( |
107 | | - [&superglobals](const auto& header) noexcept { |
108 | | - using header_t = std::remove_cvref_t<decltype(header)>; |
109 | | - |
110 | | - if constexpr (std::same_as<header_t, tl::RpcDestActor>) { |
111 | | - process_dest_actor(header.inner, superglobals); |
112 | | - } else if constexpr (std::same_as<header_t, tl::RpcDestFlags>) { |
113 | | - process_dest_flags(header.inner, superglobals); |
114 | | - } else if constexpr (std::same_as<header_t, tl::RpcDestActorFlags>) { |
115 | | - process_dest_actor_flags(header.inner, superglobals); |
116 | | - } else if constexpr (std::same_as<header_t, std::string_view>) { |
117 | | - process_no_headers(header); |
118 | | - } else { |
119 | | - static_assert(false, "non-exhaustive visitor!"); |
120 | | - } |
121 | | - }, |
122 | | - rpc_invoke_req.query); |
| 97 | + if (rpc_invoke_req.opt_dest_actor) { |
| 98 | + process_dest_actor((*rpc_invoke_req.opt_dest_actor).inner, superglobals); |
| 99 | + } |
| 100 | + if (rpc_invoke_req.opt_dest_flags) { |
| 101 | + process_dest_flags((*rpc_invoke_req.opt_dest_flags).inner, superglobals); |
| 102 | + } |
| 103 | + if (rpc_invoke_req.opt_dest_actor_flags) { |
| 104 | + process_dest_actor_flags((*rpc_invoke_req.opt_dest_actor_flags).inner, superglobals); |
| 105 | + } |
| 106 | + RpcServerInstanceState::get().buffer.store_bytes(rpc_invoke_req.query); |
123 | 107 | } |
124 | 108 |
|
125 | 109 | } // namespace |
|
0 commit comments