public function testEncode() { $message = RPCMessage::createWithRpc('a.a', ['b' => 123], 2); $encodeMessage = $message->encode(); self::assertNotEmpty($encodeMessage); $decodeMessages = RPCMessage::decode($encodeMessage); self::assertNotEmpty($decodeMessages); self::assertEquals(count($decodeMessages), 1); /** * @var $decodeMessage RPCMessage */ $decodeMessage = end($decodeMessages); self::assertTrue($decodeMessage instanceof RPCMessage); self::assertEquals('a.a', $decodeMessage->getFunctionName()); self::assertEquals(['b' => 123], $decodeMessage->getFunctionParams()); }
public function testEncodeOrDecode() { $messages = []; $messages[] = RPCMessage::createWithRpc('a.a', ['b' => 1]); $messages[] = RPCMessage::createWithRpc('b.b', ['c' => 1]); $messageString = RPCMessageEncode::encodeMessages($messages); $this->assertNotEmpty($messageString); $decodeMessages = RPCMessageEncode::decodeMessages($messageString); $this->assertTrue(is_array($decodeMessages)); $this->assertCount(2, $decodeMessages); foreach ($decodeMessages as $decodeMessage) { $this->assertInstanceOf(RPCMessage::class, $decodeMessage); } $decodeMessage = $decodeMessages[0]; if ($decodeMessage instanceof RPCMessage) { $this->assertEquals('a.a', $decodeMessage->getMessageBodyProperty(RPCMessage::Msg_RPC_FunctionName)); $this->assertEquals(['b' => 1], $decodeMessage->getMessageBodyProperty(RPCMessage::Msg_PPC_FunctionParams)); } $decodeMessage = $decodeMessages[1]; if ($decodeMessage instanceof RPCMessage) { $this->assertEquals('b.b', $decodeMessage->getMessageBodyProperty(RPCMessage::Msg_RPC_FunctionName)); $this->assertEquals(['c' => 1], $decodeMessage->getMessageBodyProperty(RPCMessage::Msg_PPC_FunctionParams)); } }
/** * 解密网络消息 * @param $message_str * @param bool|true $alloc * @param bool $encrypt * true 返回 RPCMessage 实例数组 , * false 返回数组 * @return mixed|null */ static function decodeMessages($message_str, $alloc = true, $encrypt = false) { try { // 解压缩数据 $unBase64 = base64_decode($message_str); if ($unBase64 === FALSE) { return null; } if ($encrypt) { // 解密 for ($i = strlen($unBase64) - 1; $i >= self::NOT_OR_KEY_LEN; $i--) { $unBase64[$i] = $unBase64[$i - self::NOT_OR_KEY_LEN] ^ $unBase64[$i]; } $unBase64 = substr($unBase64, self::NOT_OR_KEY_LEN); } $messagesData = gzuncompress($unBase64); if ($messagesData === FALSE) { return null; } $jsonDecodeMessages = json_decode($messagesData, true); $messages = []; if ($alloc) { foreach ($jsonDecodeMessages as $key => $jsonDecodeMessage) { $messages[$key] = RPCMessage::createWithArray($jsonDecodeMessage); } } else { $messages = $jsonDecodeMessages; } } catch (\Exception $e) { return null; } return $messages; }