added advert and message response

This commit is contained in:
Ben Menking
2026-05-29 12:37:37 -04:00
parent a115223a9f
commit 3b34c242ba
3 changed files with 56 additions and 37 deletions
+27 -37
View File
@@ -3,6 +3,7 @@
namespace Menking\Meshcore; namespace Menking\Meshcore;
use Exception; use Exception;
use Menking\Meshcore\Model\AdvertResponse;
use Menking\Meshcore\Model\BinaryResponse; use Menking\Meshcore\Model\BinaryResponse;
use Menking\Meshcore\Model\ChannelResponse; use Menking\Meshcore\Model\ChannelResponse;
use Menking\Meshcore\Model\CodeSentResponse; use Menking\Meshcore\Model\CodeSentResponse;
@@ -12,6 +13,7 @@ use Menking\Meshcore\Model\ErrorResponse;
use Menking\Meshcore\Model\LoginResponse; use Menking\Meshcore\Model\LoginResponse;
use Menking\Meshcore\Model\LogReceiveResponse; use Menking\Meshcore\Model\LogReceiveResponse;
use Menking\Meshcore\Model\BatteryStorageResponse; use Menking\Meshcore\Model\BatteryStorageResponse;
use Menking\Meshcore\Model\MessageResponse;
class CoreParser { class CoreParser {
/** /**
@@ -70,33 +72,25 @@ class CoreParser {
} }
protected static function parseMsg(string $payload): mixed { protected static function parseMsg(string $payload): mixed {
$idx = 0; $m = new MessageResponse();
$data = [ $idx = 0;
'code'=>ord($payload[$idx]) $m->code = ord($payload[$idx]);
];
$idx++; $idx++;
if( ord($payload[0]) == CoreProtocol::RESP_CODE_CHANNEL_MSG_RECV_V3 ) { if( $m->code == CoreProtocol::RESP_CODE_CHANNEL_MSG_RECV_V3 ) {
$alt = [ $m->snr = unpack('V', substr($payload, 1, 4))[1] / 4;
'snr'=>unpack('V', substr($payload, 1, 4))[1],
'reserved1'=>0,
'reserved2'=>0
];
$data = array_merge($data, $alt);
$idx = 5; $idx = 5;
} }
$remains = [ $m->channel_idx = ord($payload[$idx]);
'channel_idx'=>ord($payload[$idx]), $m->path_len = ord($payload[$idx+1]);
'path_len'=>ord($payload[$idx+1]), $m->type = ord($payload[$idx+2]);
'type'=>ord($payload[$idx+2]), $m->timestamp = unpack('V', substr($payload, $idx+3, 4))[1];
'timestamp'=>unpack('V', substr($payload, $idx+3, 4))[1], $m->message = substr($payload, $idx+7);
'message'=>substr($payload, $idx+7)
];
return array_merge($data, $remains);
return $m;
} }
/** /**
@@ -105,27 +99,23 @@ class CoreParser {
* @return mixed * @return mixed
*/ */
protected static function parseAdvert(string $payload): mixed { protected static function parseAdvert(string $payload): mixed {
$data = [ $m = new AdvertResponse();
'code'=>ord($payload[0]),
'pub_key'=>base64_encode(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE))
];
$m->code = ord($payload[0]);
$m->pub_key = base64_encode(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE));
if( strlen($payload) > CoreProtocol::PUB_KEY_SIZE ) { if( strlen($payload) > CoreProtocol::PUB_KEY_SIZE ) {
$new_data = [ $m->type = ord($payload[33]);
'type'=>ord($payload[33]), $m->flags = ord($payload[34]);
'flags'=>ord($payload[34]), $m->out_path = substr($payload, 35, CoreProtocol::MAX_PATH_SIZE);
'out_path'=>substr($payload, 35, CoreProtocol::MAX_PATH_SIZE), $m->name = substr($payload, 99, 32);
'name'=>substr($payload, 99, 32), $m->last_advert_time = unpack('V', substr($payload, 203, 4))[1];
'last_advert_time'=>unpack('V', substr($payload, 203, 4))[1], $m->lat = unpack('V', substr($payload, 207, 4))[1];
'lat'=>unpack('V', substr($payload, 207, 4))[1], $m->lon = unpack('V', substr($payload, 211, 4))[1];
'lon'=>unpack('V', substr($payload, 211, 4))[1], $m->last_mod = unpack('V', substr($payload, 215, 4))[1];
'last_mod'=>unpack('V', substr($payload, 215, 4))[1],
];
$data = array_merge($data, $new_data);
} }
return $data; return $m;
} }
/** /**
+16
View File
@@ -0,0 +1,16 @@
<?php
namespace Menking\Meshcore\Model;
class AdvertResponse extends Response {
public int $code;
public string $pub_key;
public int $type;
public int $flags;
public string $out_path;
public string $name;
public int $last_advert_time;
public int $lat;
public int $lon;
public int $last_mod;
}
+13
View File
@@ -0,0 +1,13 @@
<?php
namespace Menking\Meshcore\Model;
class MessageResponse extends Response {
public int $code;
public int $snr;
public int $channel_idx;
public int $path_len;
public int $type;
public int $timestamp;
public string $message;
}