From 985e76c9383a20a0f59f19b2ec624e7e1447197d Mon Sep 17 00:00:00 2001 From: Ben Menking Date: Thu, 4 Jun 2026 15:15:42 -0400 Subject: [PATCH] built-in exceptions needed \ --- src/Meshcore.php | 61 +++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/src/Meshcore.php b/src/Meshcore.php index 5579fc5..4cd782d 100644 --- a/src/Meshcore.php +++ b/src/Meshcore.php @@ -7,16 +7,13 @@ use Menking\Meshcore\Model\AdvertPathResponse; use Menking\Meshcore\Model\AppStartResponse; use Menking\Meshcore\Model\BatteryStorageResponse; use RuntimeException; -use Menking\Meshcore\Model\BinaryResponse; use Menking\Meshcore\Model\ChannelResponse; use Menking\Meshcore\Model\CodeSentResponse; use Menking\Meshcore\Model\CodeStatusResponse; -use Menking\Meshcore\Model\CodeStatusTypeCoreResponse; -use Menking\Meshcore\Model\CodeStatusTypePacketResponse; -use Menking\Meshcore\Model\CodeStatusTypeRadioResponse; use Menking\Meshcore\Model\CurrentTimeResponse; use Menking\Meshcore\Model\DeviceInfoResponse; use Menking\Meshcore\Model\MessageResponse; +use Menking\Meshcore\Model\NoMoreMessagesResponse; use Menking\Meshcore\Model\OkResponse; class Meshcore { @@ -48,7 +45,7 @@ class Meshcore { public function appStart(string $app_name): ?AppStartResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_APP_START) . chr(0x00) . " " . $app_name); - return $this->waitForResponse(AppStartResponse::class); + return $this->waitForResponse([AppStartResponse::class]); } /** @@ -58,7 +55,7 @@ class Meshcore { public function getBatteryAndStorage(): ?BatteryStorageResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_GET_BATT_AND_STORAGE)); - return $this->waitForResponse(BatteryStorageResponse::class); + return $this->waitForResponse([BatteryStorageResponse::class]); } /** @@ -76,7 +73,7 @@ class Meshcore { public function getDeviceInfo(): ?DeviceInfoResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_DEVICE_QUERY) . 0x03); - return $this->waitForResponse(DeviceInfoResponse::class); + return $this->waitForResponse([DeviceInfoResponse::class]); } /** @@ -87,7 +84,7 @@ class Meshcore { public function getChannel(int $channel_idx): ?ChannelResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_GET_CHANNEL) . chr($channel_idx)); - return $this->waitForResponse(ChannelResponse::class); + return $this->waitForResponse([ChannelResponse::class]); } /** @@ -108,7 +105,7 @@ class Meshcore { CoreProtocol::writeFrame($this->serial, $payload); - return $this->waitForResponse(OkResponse::class); + return $this->waitForResponse([OkResponse::class]); } /** @@ -140,7 +137,7 @@ class Meshcore { public function getNextMessage(): ?MessageResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_SYNC_NEXT_MESSAGE)); - return $this->waitForResponse(MessageResponse::class); + return $this->waitForResponse([MessageResponse::class, NoMoreMessagesResponse::class]); } /** @@ -153,7 +150,7 @@ class Meshcore { $payload = chr(CoreProtocol::CMD_SEND_CHANNEL_TXT_MSG) . chr(0x00) . chr($channel_idx) . pack('V', time()) . "$message\0"; CoreProtocol::writeFrame($this->serial, $payload); - return $this->waitForResponse(CodeSentResponse::class); + return $this->waitForResponse([CodeSentResponse::class]); } /** @@ -163,7 +160,7 @@ class Meshcore { public function getDeviceTime(): ?CurrentTimeResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_GET_DEVICE_TIME)); - return $this->waitForResponse(CurrentTimeResponse::class); + return $this->waitForResponse([CurrentTimeResponse::class]); } /** @@ -173,7 +170,7 @@ class Meshcore { public function setDeviceTime(): ?OkResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_SET_DEVICE_TIME) . pack('V', time())); - return $this->waitForResponse(OkResponse::class); + return $this->waitForResponse([OkResponse::class]); } /** @@ -187,7 +184,7 @@ class Meshcore { CoreProtocol::writeFrame($this->serial, $payload); - return $this->waitForResponse(CodeSentResponse::class); + return $this->waitForResponse([CodeSentResponse::class]); } /** @@ -198,7 +195,7 @@ class Meshcore { public function disconnect(string $contact_pk): ?OkResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_LOGOUT) . base64_decode($contact_pk) . "\0"); - return $this->waitForResponse(OkResponse::class); + return $this->waitForResponse([OkResponse::class]); } /** @@ -211,7 +208,7 @@ class Meshcore { CoreProtocol::writeFrame($this->serial, $payload); - return $this->waitForResponse(CodeSentResponse::class); + return $this->waitForResponse([CodeSentResponse::class]); } /** @@ -222,7 +219,7 @@ class Meshcore { public function connected(string $contact_pk): ?OkResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_HAS_CONNECTION) . base64_decode($contact_pk) . "\0"); - return $this->waitForResponse(OkResponse::class); + return $this->waitForResponse([OkResponse::class]); } /** @@ -233,7 +230,7 @@ class Meshcore { public function getTelemetryRequest(string $contact_pk): ?OkResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_SEND_TELEMETRY_REQ) . base64_decode($contact_pk)); - return $this->waitForResponse(OkResponse::class); + return $this->waitForResponse([OkResponse::class]); } /** @@ -244,7 +241,7 @@ class Meshcore { public function sendAnonRequest(string $contact_pk): ?OkResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_SEND_ANON_REQ) . base64_decode($contact_pk) . "\0"); - return $this->waitForResponse(OkResponse::class); + return $this->waitForResponse([OkResponse::class]); } /** @@ -255,7 +252,7 @@ class Meshcore { public function sendBinaryRequest(string $request): ?CodeSentResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_SEND_BINARY_REQ) . $request); - return $this->waitForResponse(CodeSentResponse::class); + return $this->waitForResponse([CodeSentResponse::class]); } /** @@ -266,7 +263,7 @@ class Meshcore { public function getAdvertPath(string $contact_pk): ?AdvertPathResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_GET_ADVERT_PATH) . chr(0x00) . base64_decode($contact_pk)); - return $this->waitForResponse(AdvertPathResponse::class); + return $this->waitForResponse([AdvertPathResponse::class]); } /** @@ -277,7 +274,7 @@ class Meshcore { public function getStats(int $type): ?CodeStatusResponse { CoreProtocol::writeFrame($this->serial, chr(CoreProtocol::CMD_GET_STATS) . chr($type)); - return $this->waitForResponse(CodeStatusResponse::class); + return $this->waitForResponse([CodeStatusResponse::class]); } public function setChannel(int $idx, string $name, string $secret): ?OkResponse { @@ -292,7 +289,7 @@ class Meshcore { CoreProtocol::writeFrame($this->serial, $payload); - return $this->waitForResponse(OkResponse::class); + return $this->waitForResponse([OkResponse::class]); } /** @@ -330,7 +327,7 @@ class Meshcore { $this->serial = fopen(Environment::getDevice(), 'r+b'); if( !$this->serial ) { - throw new RuntimeException("Could not open " . Environment::getDevice()); + throw new \RuntimeException("Could not open " . Environment::getDevice()); } } @@ -340,9 +337,11 @@ class Meshcore { * @return mixed * @throws InvalidArgumentException */ - private function waitForResponse(string $class_expected): mixed { - if( !class_exists($class_expected) ) { - throw new InvalidArgumentException("Class $class_expected does not exist"); + private function waitForResponse(array $classes_expected): mixed { + foreach($classes_expected as $class) { + if( !class_exists($class) ) { + throw new \InvalidArgumentException("Class $class does not exist"); + } } $mark = time(); @@ -351,14 +350,12 @@ class Meshcore { $response = CoreProtocol::readFrame($this->serial); $obj = CoreParser::parseResponse($response); - echo "D: got a " . get_class($obj) . ", was expecting $class_expected\n"; - - if( get_class($obj) != $class_expected ) { + if( !in_array(get_class($obj), $classes_expected) ) { array_push($this->msg_queue, $obj); } } - while((time() - $mark) < 5 && get_class($obj) != $class_expected); + while((time() - $mark) < 5 && !in_array(get_class($obj), $classes_expected)); - return (get_class($obj) == $class_expected)?$obj:null; + return in_array(get_class($obj), $classes_expected)?$obj:null; } } \ No newline at end of file