built-in exceptions needed \

This commit is contained in:
Ben Menking
2026-06-04 15:15:42 -04:00
parent cc70629ef1
commit 985e76c938
+29 -32
View File
@@ -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;
}
}