From 2f28d8112970960dbb9b6b582a3c6cd259337d21 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 3 Aug 2026 01:05:57 +0900 Subject: feat(php-rpc): rework the RPC channel into the tagged plugin protocol Replace the name\0arg framing with the plugin wire protocol: tagged frames with corr_id multiplexing, a MAX_FRAME_LEN bound, a thread-ID based reentrant SessionLock, and the PluginValue codec (encoder plus the first recursive decoder, iterative with a 512-level depth cap). Float formatting is ported from php-src into shirabe-php-src so the encoder is byte-compatible with serialize() under serialize_precision=-1, which the spawned worker now pins. The worker gains a standing dispatch loop, CallRustMethod reentrancy, hand-written Event proxy stubs, and explicit-error answers for everything not implemented yet. The public query API (get_php_version and friends) is unchanged and now rides the new protocol; the codec is verified against real PHP by roundtrip oracle tests covering floats, non-UTF-8 bytes and deep nesting. Co-Authored-By: Claude Fable 5 --- .../php/stubs/Composer/EventDispatcher/Event.php | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 crates/shirabe-php-rpc/php/stubs/Composer/EventDispatcher/Event.php (limited to 'crates/shirabe-php-rpc/php/stubs/Composer/EventDispatcher/Event.php') diff --git a/crates/shirabe-php-rpc/php/stubs/Composer/EventDispatcher/Event.php b/crates/shirabe-php-rpc/php/stubs/Composer/EventDispatcher/Event.php new file mode 100644 index 00000000..9ce9c12f --- /dev/null +++ b/crates/shirabe-php-rpc/php/stubs/Composer/EventDispatcher/Event.php @@ -0,0 +1,59 @@ +__rhandle = $rhandle; + $this->__epoch = $epoch; + } + + public function __destruct() + { + \ShirabeRustObjectRegistry::release($this->__rhandle); + } + + public function __shirabeRustHandleDescriptor(): array + { + return [ + '__rhandle' => $this->__rhandle, + '__class' => static::class, + '__epoch' => $this->__epoch, + ]; + } + + public function getName(): string + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getName', []); + } + + public function getArguments(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getArguments', []); + } + + public function getFlags(): array + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'getFlags', []); + } + + public function isPropagationStopped(): bool + { + return \ShirabeRpcRuntime::callRust($this->__rhandle, 'isPropagationStopped', []); + } + + public function stopPropagation(): void + { + \ShirabeRpcRuntime::callRust($this->__rhandle, 'stopPropagation', []); + } +} -- cgit v1.3.1