提交 66fa83cb 编写于 作者: 丁劲犇's avatar 丁劲犇 😸

First App-Layer msg ok

上级 4823cb62
......@@ -24,9 +24,9 @@ MainDialog::MainDialog(QWidget *parent) :
QSettings settings("goldenhawking club","FunctionalClientTest",this);
ui->lineEdit_ip->setText(settings.value("ip","localhost").toString());
ui->lineEdit_Port->setText(settings.value("port","23456").toString());
ui->lineEdit_ip->setText(settings.value("settings/ip","localhost").toString());
ui->lineEdit_Port->setText(settings.value("settings/port","23456").toString());
ui->plainTextEdit_boxSerialNum->setPlainText(settings.value("settings/box2svr_insid","Temporary Equip_id for test only, by goldenhawking@163.com.64Bts").toString());
}
MainDialog::~MainDialog()
......@@ -59,6 +59,7 @@ void MainDialog::on_client_disconnected()
{
displayMessage(QString("client %1 disconnected.").arg((quintptr)pSock));
ui->pushButton_connect->setEnabled(true);
pSock->abort();
}
}
void MainDialog::displayError(QAbstractSocket::SocketError /*err*/)
......@@ -91,6 +92,14 @@ void MainDialog::displayMessage(const QString &str)
while (model.rowCount()>=256)
model.removeRow(model.rowCount()-1);
}
void MainDialog::saveIni()
{
QSettings settings("goldenhawking club","FunctionalClientTest",this);
settings.setValue("settings/ip", ui->lineEdit_ip->text());
settings.setValue("settings/port", ui->lineEdit_Port->text());
settings.setValue("settings/box2svr_insid", ui->plainTextEdit_boxSerialNum->toPlainText());
}
void MainDialog::timerEvent(QTimerEvent * evt)
{
static int nCount = 0;
......@@ -113,13 +122,12 @@ void MainDialog::timerEvent(QTimerEvent * evt)
}
void MainDialog::on_pushButton_connect_clicked()
{
if (client->isOpen()==false)
client->connectToHost(ui->lineEdit_ip->text(),ui->lineEdit_Port->text().toUShort());
else
client->disconnectFromHost();
saveIni();
client->connectToHost(ui->lineEdit_ip->text(),ui->lineEdit_Port->text().toUShort());
}
void MainDialog::on_pushButton_regisit_clicked()
{
saveIni();
quint16 nMsgLen = sizeof(SMARTLINK_MSG_APP::tag_app_layer_header)
+sizeof(stMsg_HostRegistReq);
QByteArray array(sizeof(SMARTLINK_MSG) + nMsgLen - 1,0);
......@@ -262,7 +270,7 @@ int MainDialog::filter_message(const QByteArray & block, int offset)
m_currentBlock = QByteArray();
offset = blocklen;
this->client->disconnectFromHost();
this->client->abort();
}
} // end while block len > offset
......@@ -271,11 +279,27 @@ int MainDialog::filter_message(const QByteArray & block, int offset)
//!deal current message
int MainDialog::deal_current_message_block()
{
//First, get uuid as soon as possible
//then , Start deal to-server messages
//Server - deal messages
//The bytes left to recieve.
qint32 bytesLeft = m_currentHeader.data_length + sizeof(SMARTLINK_MSG) - 1
-m_currentMessageSize ;
if (bytesLeft)
return 0;
char * ptr = m_currentBlock.data();
SMARTLINK_MSG_APP * pApp = (SMARTLINK_MSG_APP *)(((unsigned char *)
(ptr))+sizeof(SMARTLINK_MSG)-1
);
if (pApp->header.MsgType==0x1800)
{
ui->lineEdit_boxid->setText(QString("%1").arg(pApp->MsgUnion.msg_HostRegistRsp.ID));
displayMessage(tr("Res = %1, ID = %2, Text = %3")
.arg(pApp->MsgUnion.msg_HostRegistRsp.DoneCode)
.arg(pApp->MsgUnion.msg_HostRegistRsp.ID)
.arg(pApp->MsgUnion.msg_HostRegistRsp.TextInfo)
);
}
displayMessage(tr("Broadcast Message is not currently supported."));
m_currentBlock = QByteArray();
......
......@@ -26,7 +26,7 @@ private:
QGHTcpClient * client;
QStandardItemModel model;
int nTimer;
void saveIni();
//!Message Dealers
protected:
//!deal one message, affect m_currentRedOffset,m_currentMessageSize,m_currentHeader
......
......@@ -156,7 +156,7 @@ void QTcpClientTest::timerEvent(QTimerEvent * evt)
QList<QGHTcpClient*> listObj = m_clients.keys();
for (int i=0;i<nDel;i++)
{
listObj.at(i)->disconnectFromHost();
listObj.at(i)->abort();
}
}
QGHTcpClient * client = new QGHTcpClient(this,ui.horizontalSlider->value());
......
......@@ -153,7 +153,7 @@ void zp_netTransThread::displayError(QAbstractSocket::SocketError socketError)
{
emit evt_SocketError(pSock,socketError);
qDebug()<<(pSock->errorString());
pSock->disconnectFromHost();
pSock->abort();
}
}
......@@ -228,7 +228,7 @@ void zp_netTransThread::KickAllClients(zp_netTransThread * ptr)
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(obj);
if (pSock)
{
pSock->disconnectFromHost();
pSock->abort();
}
}
......@@ -246,7 +246,7 @@ void zp_netTransThread::KickClient(QObject * objClient)
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(objClient);
if (pSock)
{
pSock->close();
pSock->abort();
}
}
......
......@@ -14,14 +14,14 @@ public:
virtual int run() = 0;
int addRef()
{
QMutexLocker locker(&m_mutex);
QMutexLocker locker(&m_mutex_ref);
refCount++;
return refCount;
}
int delRef()
{
QMutexLocker locker(&m_mutex);
QMutexLocker locker(&m_mutex_ref);
refCount--;
return refCount;
......@@ -29,13 +29,13 @@ public:
int ref()
{
QMutexLocker locker(&m_mutex);
QMutexLocker locker(&m_mutex_ref);
return refCount;
}
private:
int refCount;
QMutex m_mutex;
QMutex m_mutex_ref;
signals:
public slots:
......
......@@ -28,36 +28,36 @@ int st_clientNode::run()
while (--nMessage>=0 && nCurrSz!=0 )
{
QByteArray block;
m_mutex.lock();
m_mutex_rawData.lock();
if (m_list_RawData.size())
block = *m_list_RawData.begin();
m_mutex.unlock();
m_mutex_rawData.unlock();
if (block.isEmpty()==false && block.isNull()==false)
{
m_currentReadOffset = filter_message(block,m_currentReadOffset);
if (m_currentReadOffset >= block.size())
{
m_mutex.lock();
m_mutex_rawData.lock();
m_list_RawData.pop_front();
m_currentReadOffset = 0;
m_mutex.unlock();
m_mutex_rawData.unlock();
}
}
else
{
m_mutex.lock();
m_mutex_rawData.lock();
//pop empty cabs
if (m_list_RawData.empty()==false)
m_list_RawData.pop_front();
m_mutex.unlock();
m_mutex_rawData.unlock();
}
m_mutex.lock();
m_mutex_rawData.lock();
nCurrSz = m_list_RawData.size();
m_mutex.unlock();
m_mutex_rawData.unlock();
}
m_mutex.lock();
m_mutex_rawData.lock();
nCurrSz = m_list_RawData.size();
m_mutex.unlock();
m_mutex_rawData.unlock();
if (nCurrSz==0)
return 0;
return -1;
......@@ -67,11 +67,11 @@ int st_clientNode::run()
int st_clientNode::push_new_data(const QByteArray & dtarray)
{
int res = 0;
m_mutex.lock();
m_mutex_rawData.lock();
m_list_RawData.push_back(dtarray);
res = m_list_RawData.size();
m_mutex.unlock();
m_mutex_rawData.unlock();
m_last_Report = QDateTime::currentDateTime();
return res;
}
......
......@@ -46,7 +46,9 @@ protected:
bool Deal_BoxToServer_Messages();
//0x0001 msg, stMsg_HostRegistReq
QMutex m_mutex_equipID;
bool RegisitNewNode();
quint32 AssignNewEquipID(const QString & serial);
//data items
......@@ -64,7 +66,7 @@ protected:
SMARTLINK_MSG_APP m_current_app_header;
//The raw data queue and its mutex
QList<QByteArray> m_list_RawData;
QMutex m_mutex;
QMutex m_mutex_rawData;
//UUID of this equipment
bool m_bUUIDRecieved;
......
......@@ -3,6 +3,10 @@
#include <QSqlDatabase>
#include <QSqlQuery>
#include <assert.h>
#include <QCoreApplication>
#include <QMutexLocker>
#include <QSettings>
#include <QSqlError>
namespace SmartLink{
//0x0001 msg, stMsg_HostRegistReq
bool st_clientNode::RegisitNewNode()
......@@ -11,25 +15,130 @@ bool st_clientNode::RegisitNewNode()
(SMARTLINK_MSG_APP *)(
((const char *)(m_currentBlock.constData()))
+sizeof(SMARTLINK_MSG)-1);
//form Msgs
quint16 nMsgLen = sizeof(SMARTLINK_MSG_APP::tag_app_layer_header)
+sizeof(stMsg_HostRegistRsp);
QByteArray array(sizeof(SMARTLINK_MSG) + nMsgLen - 1,0);
char * ptr = array.data();
SMARTLINK_MSG * pMsg = (SMARTLINK_MSG *)ptr;
SMARTLINK_MSG_APP * pApp = (SMARTLINK_MSG_APP *)(((unsigned char *)
(ptr))+sizeof(SMARTLINK_MSG)-1
);
pMsg->Mark = 0x55AA;
pMsg->version = m_currentHeader.version;
pMsg->SerialNum = m_currentHeader.SerialNum;
pMsg->Priority = m_currentHeader.Priority;
pMsg->Reserved1 = 0;
pMsg->source_id = (quint32)((quint64)(m_currentHeader.destin_id) & 0xffffffff );
pMsg->destin_id = (quint32)((quint64)(m_currentHeader.source_id) & 0xffffffff );;
pMsg->data_length = nMsgLen;
pMsg->Reserved2 = 0;
pApp->header.AskID = m_current_app_header.header.AskID;
pApp->header.MsgType = 0x1800;
pApp->header.MsgFmtVersion = m_current_app_header.header.MsgFmtVersion;
stMsg_HostRegistRsp & reply = pApp->MsgUnion.msg_HostRegistRsp;
//Check the database, find current equipment info
QSqlDatabase db = m_pClientTable->dbRes()->databse(m_pClientTable->Database_UserAcct());
reply.DoneCode = 2;
reply.ID = 0xffffffff;
strcpy(reply.TextInfo,"Unknown error");
if (db.isValid()==true && db.isOpen()==true )
{
QSqlQuery query(db);
QString sql = QString ("select * from instruments where equip_id = '%1'");
if (true==query.exec(sql))
QString strSerial ;
for (int i=0;i<64;i++)
{
strSerial+= pAppLayer->MsgUnion.msg_HostRegistReq.HostSerialNum[i];
}
QString sql = "select host_serial_num,equip_id from instruments where host_serial_num = ?;";
query.prepare(sql);
query.addBindValue(strSerial);
if (true==query.exec())
{
if (query.next())
{
bool bOk = false;
int ncurrid = query.value(1).toInt(&bOk);
if (bOk==true)
{
if (ncurrid>=0x0010000 && ncurrid <=0x0FFFFFFF)
{
reply.ID = ncurrid;
reply.DoneCode = 1;
strcpy(reply.TextInfo,"Re-regisit Succeed.");
}
else
{
reply.ID = AssignNewEquipID(strSerial);
if (reply.ID>=0x0010000 && reply.ID <=0x0FFFFFFF)
{
reply.DoneCode = 0;
strcpy(reply.TextInfo,"First-regisit Succeed.");
}
else
strcpy(reply.TextInfo,"Equip ID resource error.");
}
}
else
strcpy(reply.TextInfo,"Raw Dev ID Is Invalid.");
}
else
{
// No such device
strcpy(reply.TextInfo,"No such device ID.");
}
}
else
{
strcpy(reply.TextInfo,"Server Access Error.");
emit evt_Message(tr("Database Access Error :")+query.lastError().text());
}
}
else
{
//Server db is currently not accessable, wait.
strcpy(reply.TextInfo,"Server Not Accessable Now.");
}
//Send back
emit evt_SendDataToClient(this->sock(),array);
return reply.DoneCode==2?false:true;
}
quint32 st_clientNode::AssignNewEquipID(const QString & serial)
{
QString config_file = QCoreApplication::applicationDirPath();
config_file += "/serial.ini";
QSettings settings(config_file,QSettings::IniFormat);
QMutexLocker locker(&m_mutex_equipID);
quint32 id = settings.value("counter/serial",(quint32)0x10000).toUInt();
settings.setValue("counter/serial",(quint32)(id+1));
QSqlDatabase db = m_pClientTable->dbRes()->databse(m_pClientTable->Database_UserAcct());
QSqlQuery query(db);
QString strSql = QString ("update instruments set equip_id = ? where host_serial_num = ?;");
query.prepare(strSql);
query.addBindValue(id);
query.addBindValue(serial);
if (false==query.exec())
{
id = 0;
emit evt_Message(tr("Database Access Error :")+query.lastError().text());
}
return true;
return id;
}
}
......@@ -32,6 +32,7 @@ typedef struct tag_smartlink_app_layer{
union union_MsgUnion
{
stMsg_HostRegistReq msg_HostRegistReq;
stMsg_HostRegistRsp msg_HostRegistRsp;
}MsgUnion;
} SMARTLINK_MSG_APP;
......@@ -64,6 +65,7 @@ typedef struct tag_smartlink_app_layer{
union union_MsgUnion
{
stMsg_HostRegistReq msg_HostRegistReq;
stMsg_HostRegistRsp msg_HostRegistRsp;
}MsgUnion;
} SMARTLINK_MSG_APP;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册