https://192.0.0.241/USTA-dac/branches/dev/V1.10.500/dac


在das目录用源码编译出来libConfigMgr.so(配置管理),libDevResMgr.so(设备管理),libDriverMgr.so(驱动管理),libProtocolProxy.so(协议代理)这四个库之后。将这几个库放入servicepackage文件夹。
将驱动包放到driverpackage文件夹里面
运行脚本
./package.sh
打包出来的微服务成果物在output文件夹下面
把包放到安装环境
在驱动包的META-INF文件夹下driver.xml的加上event能力
(重要!不然会导致订阅下发不下去)
执行包下面的install.sh脚本
systemclt restart 程序名启动程序
ok,执行完这五部,驱动微服务版本部署完成。
相对于基线设备接入服务有一些改动点
//RegisterDrvToDMS
//驱动注册DMS的格式.
POST /dac/driverManager/v1/driverRegister HTTP/1.1
Host: 10.14.69.25:8080
TOKEN: SElLIFRvdVBhWFFmd0xkdVNKRTI6bFFTY1ZUYTlpcEFkTjEyblZhYmVYTU5uQlN4TnVxS0VyVlhlbnVtWGdEOD0=
Cache-Control: no-cache
Postman-Token: 99498a85-4ff7-6e2a-24af-d4d78c4694fc
{
"indexCode":"test1",
"deviceKey":"drv_vss_hiksdk_general_1.10.100",
"addr":"10.19.133.74",
"port":8000
"ehomePort":15000
}
//CConfigWrapper::Initialize
//服务标识生成代码
std::fstream fstr;
const char* fileName = "dasIndexCode.txt";
std::ios_base::openmode openMode = (std::ios::in | std::ios::out | std::ios::app);
fstr.open(fileName, openMode);
string dasIndexCode("");
if(fstr)
{
std::ostringstream oStrStrDicCata;
oStrStrDicCata << fstr.rdbuf();
dasIndexCode = oStrStrDicCata.str();
if(dasIndexCode.empty())
{
dasIndexCode=GetUUIDStr(8)+"-"+GetUUIDStr(4)+"-"+GetUUIDStr(4)+"-"+GetUUIDStr(4)+"-"+GetUUIDStr(12);
fstr << dasIndexCode;
}
fstr.close();
}
else
{
DAF_ERROR("open file dasIndexCode.txt error.");
nRet = CONFIGMGR_ERR_CSF_INIT;
break;
}
//向注册中心注册
char* config[] = {"dms", "bic"};
//驱动直接向dms注册,此处所有不同类型驱动的名称相同,不能用于服务发现
HPR_Strncpy(CsfParam.serverName,"dac-dasdvr",MAX_SERVER_NAME_LEN - 1);
HPR_Strncpy(CsfParam.serverID,m_strIndexcode.c_str(),m_strIndexcode.size());
CsfParam.nEnableFunctions = kAddress | kRegister;//向consul注册后所有类型驱动的名字都是dac-dasdvr
CsfParam.extraConfigSize = 2;
CsfParam.extraConfigArray = config;
//在CConfigWrapper::OnTimer这个定时器中UpdateDmsHostInfo这个函数定时去获取dms的信息。
//从注册中心获取dms地址。如果获取不到则用默认地址
if (true != CsfDocker::instance()->GetSvrAddrArray("dac-dms", addarr, &chDmsIpSize))
{
strIp = "127.0.0.1";
strPort = "8081";
DAF_ERROR("CsfDocker::instance()->GetSvrAddr dmsinfo from cfs error[err=%d]", Csf::GetLastError());
}
else
{
for (int i = 0; i < chDmsIpSize; i++) {
string straddr = to_string(addarr[i].serverIP) + ":" + to_string(addarr[i].serverPort);
strIp = to_string(addarr[i].serverIP);
strPort = to_string(addarr[i].serverPort);
//如果地址没有变则退出
if (straddr == m_strDmsInfo) {
break;
}
}
DAF_INFO("CsfDocker::instance()->GetSvrAddr dmsinfo [ip=%s][port=%s]", strIp.c_str(), strPort.c_str());
}
//CDriverMgr_SyncDevSubEventInfo
if (events.size() == 1 && ((events[0].asString() == "0") || events[0].asString() == "*")) {
listEvents.push_back(0);
}
else {
for (unsigned int j = 0; j < events.size(); ++j)
{
int iEvent = HPR_Atoi32(events[j].asString().c_str());
if (iEvent != 0)
{
listEvents.push_back(iEvent);
}
}
}
//CDeviceMgr::ModifyDeviceInUserThread
if (cListDevice.size()>0)
{
DEVRESMGR_INFO("SubDevEventInUserThread start");
CDataSrcMgrSingleton::Instance()->SubDevEventInUserThread(cListDevice);
}
目前遇到的问题最多的就是订阅问题。所以说解决了订阅下发的问题就解决了90%的问题。
我改了很多bug之后,das壳子本身的问题应该是没有了。
日志打的很多很详细。可以配合pluginframe的同事一起看下。如果没有发送到pluginframe就可以排查下das的问题。
可以从下面几个方向切入
其他还有啥需要补充的可以说下我再补充下。
在这里插入代码片