added advert and message response
This commit is contained in:
+27
-37
@@ -3,6 +3,7 @@
|
||||
namespace Menking\Meshcore;
|
||||
|
||||
use Exception;
|
||||
use Menking\Meshcore\Model\AdvertResponse;
|
||||
use Menking\Meshcore\Model\BinaryResponse;
|
||||
use Menking\Meshcore\Model\ChannelResponse;
|
||||
use Menking\Meshcore\Model\CodeSentResponse;
|
||||
@@ -12,6 +13,7 @@ use Menking\Meshcore\Model\ErrorResponse;
|
||||
use Menking\Meshcore\Model\LoginResponse;
|
||||
use Menking\Meshcore\Model\LogReceiveResponse;
|
||||
use Menking\Meshcore\Model\BatteryStorageResponse;
|
||||
use Menking\Meshcore\Model\MessageResponse;
|
||||
|
||||
class CoreParser {
|
||||
/**
|
||||
@@ -70,33 +72,25 @@ class CoreParser {
|
||||
}
|
||||
|
||||
protected static function parseMsg(string $payload): mixed {
|
||||
$idx = 0;
|
||||
$m = new MessageResponse();
|
||||
|
||||
$data = [
|
||||
'code'=>ord($payload[$idx])
|
||||
];
|
||||
$idx = 0;
|
||||
$m->code = ord($payload[$idx]);
|
||||
$idx++;
|
||||
|
||||
if( ord($payload[0]) == CoreProtocol::RESP_CODE_CHANNEL_MSG_RECV_V3 ) {
|
||||
$alt = [
|
||||
'snr'=>unpack('V', substr($payload, 1, 4))[1],
|
||||
'reserved1'=>0,
|
||||
'reserved2'=>0
|
||||
];
|
||||
|
||||
$data = array_merge($data, $alt);
|
||||
if( $m->code == CoreProtocol::RESP_CODE_CHANNEL_MSG_RECV_V3 ) {
|
||||
$m->snr = unpack('V', substr($payload, 1, 4))[1] / 4;
|
||||
$idx = 5;
|
||||
}
|
||||
|
||||
$remains = [
|
||||
'channel_idx'=>ord($payload[$idx]),
|
||||
'path_len'=>ord($payload[$idx+1]),
|
||||
'type'=>ord($payload[$idx+2]),
|
||||
'timestamp'=>unpack('V', substr($payload, $idx+3, 4))[1],
|
||||
'message'=>substr($payload, $idx+7)
|
||||
];
|
||||
$m->channel_idx = ord($payload[$idx]);
|
||||
$m->path_len = ord($payload[$idx+1]);
|
||||
$m->type = ord($payload[$idx+2]);
|
||||
$m->timestamp = unpack('V', substr($payload, $idx+3, 4))[1];
|
||||
$m->message = substr($payload, $idx+7);
|
||||
|
||||
return array_merge($data, $remains);
|
||||
|
||||
return $m;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,27 +99,23 @@ class CoreParser {
|
||||
* @return mixed
|
||||
*/
|
||||
protected static function parseAdvert(string $payload): mixed {
|
||||
$data = [
|
||||
'code'=>ord($payload[0]),
|
||||
'pub_key'=>base64_encode(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE))
|
||||
];
|
||||
$m = new AdvertResponse();
|
||||
|
||||
$m->code = ord($payload[0]);
|
||||
$m->pub_key = base64_encode(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE));
|
||||
|
||||
if( strlen($payload) > CoreProtocol::PUB_KEY_SIZE ) {
|
||||
$new_data = [
|
||||
'type'=>ord($payload[33]),
|
||||
'flags'=>ord($payload[34]),
|
||||
'out_path'=>substr($payload, 35, CoreProtocol::MAX_PATH_SIZE),
|
||||
'name'=>substr($payload, 99, 32),
|
||||
'last_advert_time'=>unpack('V', substr($payload, 203, 4))[1],
|
||||
'lat'=>unpack('V', substr($payload, 207, 4))[1],
|
||||
'lon'=>unpack('V', substr($payload, 211, 4))[1],
|
||||
'last_mod'=>unpack('V', substr($payload, 215, 4))[1],
|
||||
];
|
||||
|
||||
$data = array_merge($data, $new_data);
|
||||
$m->type = ord($payload[33]);
|
||||
$m->flags = ord($payload[34]);
|
||||
$m->out_path = substr($payload, 35, CoreProtocol::MAX_PATH_SIZE);
|
||||
$m->name = substr($payload, 99, 32);
|
||||
$m->last_advert_time = unpack('V', substr($payload, 203, 4))[1];
|
||||
$m->lat = unpack('V', substr($payload, 207, 4))[1];
|
||||
$m->lon = unpack('V', substr($payload, 211, 4))[1];
|
||||
$m->last_mod = unpack('V', substr($payload, 215, 4))[1];
|
||||
}
|
||||
|
||||
return $data;
|
||||
return $m;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user