added advert and message response
This commit is contained in:
+27
-37
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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