|
@@ -1,7 +1,77 @@
|
|
|
#include "Expel.hpp"
|
|
|
+#include "Shell.h"
|
|
|
|
|
|
namespace gsd
|
|
|
{
|
|
|
+ class ExpelClient: public TcpClient {
|
|
|
+ public:
|
|
|
+ typedef std::shared_ptr<ExpelClient> Ptr;
|
|
|
+ ExpelClient():TcpClient() {
|
|
|
+ }
|
|
|
+ ~ExpelClient(){
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @description: setDeviceControl
|
|
|
+ * @param {shared_ptr<deviceBase>} DeviceControl
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
+ void setDeviceControl(std::shared_ptr<ContorlGear> DeviceControl){
|
|
|
+ this->deviceControl = DeviceControl;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @description: setSendBuf
|
|
|
+ * @param {Ptr} Buffer
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
+ void setSendBuf(const BufferRaw::Ptr Buffer){
|
|
|
+ buffer = Buffer;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected:
|
|
|
+ virtual void onConnect(const SockException &ex) override{
|
|
|
+ //连接结果事件
|
|
|
+ if(buffer != nullptr) this->send(buffer);
|
|
|
+ }
|
|
|
+ virtual void onRecv(const Buffer::Ptr &pBuf) override{
|
|
|
+ int msg = 0;
|
|
|
+ if(this->deviceControl == nullptr) return;
|
|
|
+ if(this->deviceControl->Consumer((uint8_t *)pBuf->data(), (int)pBuf->size(), msg)){
|
|
|
+ if(config::getPtr()->debug) DebugL << "deviceId[" << deviceControl->getDeviceId() << "] Device response is succeed" << endl;
|
|
|
+ if(config::getPtr()->debug) DebugL << "REV:" << Expel::bytesToHexString((uint8_t *)pBuf->data(), (int)pBuf->size()) << endl;
|
|
|
+ std::string json;
|
|
|
+ SendDevice sendDevice;
|
|
|
+ time_t timestamp;
|
|
|
+ NettyClientResultMsg<SendDevice> nettyClientResultMsg;
|
|
|
+ deviceControl->BuildDeviceInfo(sendDevice);
|
|
|
+ time(×tamp);
|
|
|
+ sendDevice.msgTime = ctime(×tamp);
|
|
|
+ std::string requestId;
|
|
|
+ requestId = uuid::generate();
|
|
|
+ nettyClientResultMsg.setRequestId(requestId);
|
|
|
+ nettyClientResultMsg.setDataType(NettyClientCommandEnum().device_info);
|
|
|
+ nettyClientResultMsg.setData(sendDevice);
|
|
|
+ nettyClientResultMsg.objectToJson(json);
|
|
|
+ NoticeCenter::Instance().emitEvent(NOTICE_DEVICEINFO, requestId ,json);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ virtual void onFlush() override{
|
|
|
+ //发送阻塞后,缓存清空事件
|
|
|
+ DebugL;
|
|
|
+ }
|
|
|
+ virtual void onErr(const SockException &ex) override{
|
|
|
+ //断开连接事件,一般是EOF
|
|
|
+ WarnL << ex.what();
|
|
|
+ }
|
|
|
+ virtual void onManager() override{
|
|
|
+ }
|
|
|
+ private:
|
|
|
+ int _nTick = 0;
|
|
|
+ std::shared_ptr<ContorlGear> deviceControl = nullptr;
|
|
|
+ BufferRaw::Ptr buffer = nullptr;
|
|
|
+ };
|
|
|
+
|
|
|
/**
|
|
|
* @description: 获取Ptr
|
|
|
* @return {*}
|
|
@@ -13,6 +83,41 @@ namespace gsd
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * @description: HttpControler http的控制接口
|
|
|
+ * @param {int} commandCode
|
|
|
+ * @param {ExpelDevice} expelDevice
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
+ void Expel::HttpControler(int commandCode, ExpelDevice expelDevice){
|
|
|
+ this->pool->async([this, commandCode, expelDevice](){
|
|
|
+ ExpelDevice expel = expelDevice;
|
|
|
+ switch (commandCode)
|
|
|
+ {
|
|
|
+ // 查询
|
|
|
+ case 1:
|
|
|
+ this->Status(expel);
|
|
|
+ break;
|
|
|
+ // 开启电源
|
|
|
+ case 2:
|
|
|
+ this->Open(expel);
|
|
|
+ break;
|
|
|
+ // 关闭电源
|
|
|
+ case 3:
|
|
|
+ this->Close(expel);
|
|
|
+ break;
|
|
|
+ // 开炮
|
|
|
+ case 4:
|
|
|
+ this->Fire(expel);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this->pool->start();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
* @description: sendDeviceMsgCallback
|
|
|
* @param {NettyServerResultMsg<RecDeviceCommand>} &nettyServerResultMsg
|
|
|
* @param {ExpelDevice} expelDevice
|
|
@@ -92,9 +197,10 @@ namespace gsd
|
|
|
std::dynamic_pointer_cast<DevicePlayerV3>(deviceControl)->setServerIP(expelDevice.ServerIp);
|
|
|
break;
|
|
|
|
|
|
- // case DeviceGasV3:
|
|
|
- // deviceControl = std::make_shared<deviceGasV3>();
|
|
|
- // break;
|
|
|
+ case DeviceType::DevicePlayerV4:
|
|
|
+ deviceControl = std::make_shared<DevicePlayerV4>();
|
|
|
+ std::dynamic_pointer_cast<DevicePlayerV4>(deviceControl)->setServerIP(config::getPtr()->payServerIP);
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return deviceControl;
|
|
@@ -108,6 +214,7 @@ namespace gsd
|
|
|
int32_t Expel::Open(ExpelDevice& expelDevice){
|
|
|
std::shared_ptr<ContorlGear> deviceControl = nullptr;
|
|
|
deviceControl = getControl(expelDevice);
|
|
|
+ if(deviceControl == nullptr) return -1;
|
|
|
uint8_t data[1024];
|
|
|
memset(data, 0, sizeof(data));
|
|
|
int length = 0;
|
|
@@ -129,6 +236,7 @@ namespace gsd
|
|
|
int32_t Expel::Close(ExpelDevice& expelDevice){
|
|
|
std::shared_ptr<ContorlGear> deviceControl = nullptr;
|
|
|
deviceControl = getControl(expelDevice);
|
|
|
+ if(deviceControl == nullptr) return -1;
|
|
|
uint8_t data[1024];
|
|
|
memset(data, 0, sizeof(data));
|
|
|
int length = 0;
|
|
@@ -149,6 +257,7 @@ namespace gsd
|
|
|
int32_t Expel::Fire(ExpelDevice& expelDevice){
|
|
|
std::shared_ptr<ContorlGear> deviceControl = nullptr;
|
|
|
deviceControl = getControl(expelDevice);
|
|
|
+ if(deviceControl == nullptr) return -1;
|
|
|
uint8_t data[1024];
|
|
|
memset(data, 0, sizeof(data));
|
|
|
int length = 0;
|
|
@@ -170,6 +279,7 @@ namespace gsd
|
|
|
int32_t Expel::Status(ExpelDevice& expelDevice){
|
|
|
std::shared_ptr<ContorlGear> deviceControl = nullptr;
|
|
|
deviceControl = getControl(expelDevice);
|
|
|
+ if(deviceControl == nullptr) return -1;
|
|
|
uint8_t data[1024];
|
|
|
memset(data, 0, sizeof(data));
|
|
|
int length = 0;
|
|
@@ -210,9 +320,11 @@ namespace gsd
|
|
|
* @return {*}
|
|
|
*/
|
|
|
int32_t Expel::Control(std::shared_ptr<ContorlGear>& deviceControl, ExpelDevice& expelDevice, uint8_t* data, int& length, int type){
|
|
|
+ static ExpelClient::Ptr client(new ExpelClient());
|
|
|
std::lock_guard<mutex> gurad(m_mutex);
|
|
|
deviceControl->setDeviceId(expelDevice.DeviceId);
|
|
|
if(deviceControl->getDeviceTool() == ContorlGear::DeviceTools::serial){
|
|
|
+ DebugL;
|
|
|
CSerialPort ser;
|
|
|
config::Ptr m_config = config::getPtr();
|
|
|
if(m_config->debug) DebugL << "Serial control data:" << bytesToHexString(data, length) << endl;
|
|
@@ -230,6 +342,7 @@ namespace gsd
|
|
|
ser.close();
|
|
|
return 0;
|
|
|
}else if(deviceControl->getDeviceTool() == ContorlGear::DeviceTools::http){
|
|
|
+ DebugL;
|
|
|
std::string serviceIP = "";
|
|
|
if(config::getPtr()->getApp() == "gsd_SZX"){
|
|
|
serviceIP = config::getPtr()->payServerIP;
|
|
@@ -258,6 +371,18 @@ namespace gsd
|
|
|
ErrorL << "HTTP Service unavailable:" << err << endl;
|
|
|
return -1;
|
|
|
}
|
|
|
+ }else if(deviceControl->getDeviceTool() == ContorlGear::DeviceTools::tcp){
|
|
|
+ if(expelDevice.ServerIp == ""){
|
|
|
+ ErrorL << "The device IP address is empty" << endl;
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ client->setDeviceControl(deviceControl);
|
|
|
+ if(!client->alive()) client->startConnect(expelDevice.ServerIp, config::getPtr()->ExpelPort);
|
|
|
+ if(config::getPtr()->debug) DebugL << "Serial control data:" << bytesToHexString(data, length) << endl;
|
|
|
+ auto buf = BufferRaw::create();
|
|
|
+ buf->assign((char*)data, length);
|
|
|
+ client->setSendBuf(buf);
|
|
|
+ if(client->alive()) client->send(buf);
|
|
|
}
|
|
|
else return -1;
|
|
|
}
|
|
@@ -299,7 +424,6 @@ namespace gsd
|
|
|
nettyClientResultMsg.setDataType(NettyClientCommandEnum().device_info);
|
|
|
nettyClientResultMsg.setData(sendDevice);
|
|
|
nettyClientResultMsg.objectToJson(json);
|
|
|
-
|
|
|
NoticeCenter::Instance().emitEvent(NOTICE_DEVICEINFO, requestId ,json);
|
|
|
}
|
|
|
break;
|
|
@@ -323,16 +447,12 @@ namespace gsd
|
|
|
if(config::getPtr()->DeviceIds.empty()){
|
|
|
return 0;
|
|
|
}
|
|
|
- // for(auto iter = config::getPtr()->DeviceIds.begin(); iter != config::getPtr()->DeviceIds.end(); iter++){
|
|
|
- // ExpelDevice expelDevice;
|
|
|
- // expelDevice.DeviceId = std::to_string(*iter);
|
|
|
- // expelDevice.deviceType = (enum DeviceType)config::getPtr()->deviceType;
|
|
|
- // if(expelDevice.deviceType == 4) expelDevice.deviceToken = tcp;
|
|
|
- // else if(expelDevice.deviceType == 3) expelDevice.deviceToken = http;
|
|
|
- // else expelDevice.deviceToken = serial;
|
|
|
-
|
|
|
- // this->Open(expelDevice);
|
|
|
- // }
|
|
|
+ for(auto iter = config::getPtr()->DeviceIds.begin(); iter != config::getPtr()->DeviceIds.end(); iter++){
|
|
|
+ ExpelDevice expelDevice;
|
|
|
+ expelDevice.DeviceId = std::to_string(*iter);
|
|
|
+ expelDevice.deviceType = (enum DeviceType)config::getPtr()->deviceType;
|
|
|
+ this->Open(expelDevice);
|
|
|
+ }
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -349,15 +469,12 @@ namespace gsd
|
|
|
}
|
|
|
}else{
|
|
|
if(config::getPtr()->DeviceIds.empty()) return 0;
|
|
|
- // for(auto iter = config::getPtr()->DeviceIds.begin(); iter != config::getPtr()->DeviceIds.end(); iter++){
|
|
|
- // ExpelDevice expelDevice;
|
|
|
- // expelDevice.DeviceId = std::to_string(*iter);
|
|
|
- // expelDevice.deviceType = (enum DeviceType)config::getPtr()->deviceType;
|
|
|
- // if(expelDevice.deviceType == 4) expelDevice.deviceToken = tcp;
|
|
|
- // else if(expelDevice.deviceType == 3) expelDevice.deviceToken = http;
|
|
|
- // else expelDevice.deviceToken = serial;
|
|
|
- // this->Close(expelDevice);
|
|
|
- // }
|
|
|
+ for(auto iter = config::getPtr()->DeviceIds.begin(); iter != config::getPtr()->DeviceIds.end(); iter++){
|
|
|
+ ExpelDevice expelDevice;
|
|
|
+ expelDevice.DeviceId = std::to_string(*iter);
|
|
|
+ expelDevice.deviceType = (enum DeviceType)config::getPtr()->deviceType;
|
|
|
+ this->Close(expelDevice);
|
|
|
+ }
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -374,15 +491,12 @@ namespace gsd
|
|
|
}
|
|
|
}else{
|
|
|
if(config::getPtr()->DeviceIds.empty()) return 0;
|
|
|
- // for(auto iter = config::getPtr()->DeviceIds.begin(); iter != config::getPtr()->DeviceIds.end(); iter++){
|
|
|
- // ExpelDevice expelDevice;
|
|
|
- // expelDevice.DeviceId = std::to_string(*iter);
|
|
|
- // expelDevice.deviceType = (enum DeviceType)config::getPtr()->deviceType;
|
|
|
- // if(expelDevice.deviceType == 4) expelDevice.deviceToken = tcp;
|
|
|
- // else if(expelDevice.deviceType == 3) expelDevice.deviceToken = http;
|
|
|
- // else expelDevice.deviceToken = serial;
|
|
|
- // this->Fire(expelDevice);
|
|
|
- // }
|
|
|
+ for(auto iter = config::getPtr()->DeviceIds.begin(); iter != config::getPtr()->DeviceIds.end(); iter++){
|
|
|
+ ExpelDevice expelDevice;
|
|
|
+ expelDevice.DeviceId = std::to_string(*iter);
|
|
|
+ expelDevice.deviceType = (enum DeviceType)config::getPtr()->deviceType;
|
|
|
+ this->Fire(expelDevice);
|
|
|
+ }
|
|
|
}
|
|
|
return 0;
|
|
|
}
|