使用workerman解析云快充V1.6协议,得到解析后的数据,进行以下逻辑处理不同类型的消息
<?php
// +----------------------------------------------------------------------
// | ITUX.CN [ ITUX.CN软件定制开发 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2014~2023 https://itux.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 此软件并不是自由软件,未经许可不能去掉ITUX相关版权
// +----------------------------------------------------------------------
// | Author: 13103895694 <itholiday@126.com>
// +----------------------------------------------------------------------
namespace addons\gaga\library\cqrs\events;
use addons\gaga\library\cqrs\enums\CqrsEnum;
use addons\gaga\library\cqrs\services\CqrsGatewayService;
use app\admin\model\gaga\Device;
use think\Exception;
/**
* 主逻辑
* 主要是处理 onConnect onMessage onClose 三个方法
* onConnect 和 onClose 如果不需要可以不用实现并删除
*/
class CqrsEvent
{
/**
* 当客户端连接时触发
* 如果业务不需此回调可以删除onConnect
*
* @param int $client_id 连接id
*/
public static function onConnect($client_id)
{
}
/**
* 当客户端发来消息时触发
* @param int $client_id 连接id
* @param mixed $message 具体消息
*/
public static function onMessage($client_id, $message)
{
try {
$logic = new CqrsGatewayService($client_id, $message);
extract($message, EXTR_PREFIX_ALL, 'pre');
switch (strtoupper($pre_package_type)) {
case CqrsEnum::PACKAGE_01:
$logic->loginAuth();
break;
case CqrsEnum::PACKAGE_03:
$logic->pong();
break;
case CqrsEnum::PACKAGE_05:
$logic->rechargeModelCheck();
break;
case CqrsEnum::PACKAGE_09:
$logic->rechargeModel();
break;
case CqrsEnum::PACKAGE_13:
$logic->realtimedata();
break;
case CqrsEnum::PACKAGE_15://充电握手
break;
case CqrsEnum::PACKAGE_17://参数配置
break;
case CqrsEnum::PACKAGE_1B://错误报文
break;
case CqrsEnum::PACKAGE_1D://充电阶段BMS中止
break;
case CqrsEnum::PACKAGE_21://充电阶段充电机中止
break;
case CqrsEnum::PACKAGE_23://充电过程BMS需求与充电机输出
break;
case CqrsEnum::PACKAGE_25://充电过程BMS信息
break;
case CqrsEnum::PACKAGE_31://充电桩主动申请启动充电
$logic->onlineCardOpenRecharge();
break;
case CqrsEnum::PACKAGE_33:
$logic->openRechargeReply();
break;
case CqrsEnum::PACKAGE_35:
$logic->closeRechargeReply();
break;
case CqrsEnum::PACKAGE_3B:
$logic->closeOrder();//充电结算
break;
case CqrsEnum::PACKAGE_19:
$logic->finishOrder();//充电结束
break;
case CqrsEnum::PACKAGE_41:
$logic->updateBalanceReply();
break;
case CqrsEnum::PACKAGE_51:
$logic->changeDeviceStatusReply();
break;
case CqrsEnum::PACKAGE_55:
$logic->timesynReply();
break;
case CqrsEnum::PACKAGE_57:
$logic->updateChargeModelReply();
break;
case CqrsEnum::PACKAGE_91:
$logic->restartReply();
break;
}
$logic = null;
} catch (Exception $exception) {
echo $exception->getMessage() . PHP_EOL;
}
}
/**
* 当用户断开连接时触发
* @param int $client_id 连接id
*/
public static function onClose($client_id)
{
$device_no = $_SESSION['device_no'];
if (!empty($device_no)) {
Device::where('status', Device::$device_online)->where('device_no', $device_no)->update(['status' => Device::$device_offline]);
}
}
}