You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Cigarette/Cigarette/threadSend.cpp

174 lines
5.1 KiB
C++

#include "threadSend.h"
#include <QUdpSocket>
#include "basecamera.h"
#include <QFile>
#include <QFileInfo>
void threadSend::init(SyncQueue<_UDPSendInfo> *p_UDP_Info_queue,std::string IP,int port)
{
ip = QString::fromStdString(IP);
dataport = port;
imageport = port+NumberOfSupportedCameras;
Local_UDP_Info_queue = p_UDP_Info_queue;
qDebug() << "MonitorIP ip:"<<ip<<"|MonitorPort:"<<dataport;
}
void threadSend::start_work()
{
//start(HighestPriority);
start();
}
void threadSend::stop()
{
isLoop = false;
// wait();
}
void threadSend::run()
{
while (isLoop)
{
_UDPSendInfo UDPSendInfo;
Local_UDP_Info_queue->take(UDPSendInfo);
switch(UDPSendInfo.FrameID){
case info_frame:{
sendData(&UDPSendInfo, dataport);
break;
}
case speed_frame:{
sendSpeed(&UDPSendInfo, dataport);
break;
}
case kick_frame:{
sendKick(&UDPSendInfo, dataport);
break;
}
case ok_frame:{
sendOK(&UDPSendInfo, dataport);
break;
}
case ng_frame:{
sendNG(&UDPSendInfo, dataport);
break;
}
case total_frame:{
sendTotal(&UDPSendInfo, dataport);
break;
}
case image_frame:{
sendImage(&UDPSendInfo,imageport);
break;
}
}
}
}
void threadSend::sendData(_UDPSendInfo *UDPSendInfo,int port)
{
QString res = QString("%1_%2_%3")
.arg(QString::number(UDPSendInfo->FrameID))
.arg(UDPSendInfo->JD)
.arg(UDPSendInfo->timecost);
mSocket.writeDatagram(res.toUtf8(), QHostAddress(ip), port + UDPSendInfo->index);
}
void threadSend::sendData(QString data, int port)
{
mSocket.writeDatagram(data.toUtf8(), QHostAddress(ip), port);
}
void threadSend::sendImage(_UDPSendInfo *UDPSendInfo,int port)
{
cv::Mat mat = UDPSendInfo->image;
char cnt = UDPSendInfo->cnt;
//cv::resize(mat, mat, cv::Size(image_width, image_heigh));
cv::resize(mat, mat, cv::Size(image_width, image_heigh),4,4,2);
int length = image_width * image_heigh * 3;
char* data = (char*)malloc(sizeof(char) * length + 1);
if (data)
{
memcpy(data, &cnt, 1);
memcpy(data+1, mat.data, length);
int ret=mSocket.writeDatagram((char*)data, length+1, QHostAddress(ip), port + UDPSendInfo->index);
free(data);
}
}
void threadSend::sendSpeed(_UDPSendInfo *UDPSendInfo,int port)
{
QString res = QString("%1_%2")
.arg(QString::number(UDPSendInfo->FrameID))
.arg(UDPSendInfo->speed);
mSocket.writeDatagram(res.toUtf8(), QHostAddress(ip), port + UDPSendInfo->index);
}
void threadSend::sendKick(_UDPSendInfo *UDPSendInfo,int port)
{
QString res = QString("%1_%2")
.arg(QString::number(UDPSendInfo->FrameID))
.arg(QString::number(UDPSendInfo->Kick[UDPSendInfo->index]));
mSocket.writeDatagram(res.toUtf8(), QHostAddress(ip), port + UDPSendInfo->index);
}
void threadSend::sendOK(_UDPSendInfo *UDPSendInfo,int port)
{
QString res = QString("%1_%2")
.arg(QString::number(UDPSendInfo->FrameID))
.arg(QString::number(UDPSendInfo->ok[UDPSendInfo->index]));
mSocket.writeDatagram(res.toUtf8(), QHostAddress(ip), port + UDPSendInfo->index);
}
void threadSend::sendNG(_UDPSendInfo *UDPSendInfo,int port)
{
QString res = QString("%1_%2")
.arg(QString::number(UDPSendInfo->FrameID))
.arg(QString::number(UDPSendInfo->ng[UDPSendInfo->index]));
mSocket.writeDatagram(res.toUtf8(), QHostAddress(ip), port + UDPSendInfo->index);
}
void threadSend::sendTotal(_UDPSendInfo *UDPSendInfo,int port)
{
QString res = QString("%1_%2")
.arg(QString::number(UDPSendInfo->FrameID))
.arg(QString::number(UDPSendInfo->Total));
mSocket.writeDatagram(res.toUtf8(), QHostAddress(ip), port + UDPSendInfo->index);
}
void threadSend::sendFile(QString FilePath, int port)
{
QFileInfo info(FilePath);
QString filename = info.fileName();
QFile file(FilePath);
if (file.size() > 0) {
bool isOk = file.open(QIODevice::ReadOnly);
if (false == isOk) {
return ;
}
}
else {
return ;
}
QString sync("SYNC");
if (!file.atEnd()) {
QString FileStartFrame(sync);
FileStartFrame.append("str");
FileStartFrame.append(filename);
mSocket.writeDatagram(FileStartFrame.toLatin1(), QHostAddress(ip), port);
}
msleep(10);
while (!file.atEnd()) {//文件指针
QString FileFrame(sync);
FileFrame.append("con");
QByteArray line = FileFrame.toLatin1() + file.read(1000);
mSocket.writeDatagram(line, QHostAddress(ip), port);
msleep(10);
}
QString FileEndFrame(sync);
FileEndFrame.append("end");//结尾标志
FileEndFrame.append(QString::number(file.size()));//文件大小
mSocket.writeDatagram(FileEndFrame.toLatin1(), QHostAddress(ip), port);
file.close();
}