Files
back_ClearCSICamServer/CSIServer/serverthread.cpp
T
2023-03-31 13:39:35 +08:00

73 lines
2.3 KiB
C++

#include "serverthread.h"
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
serverThread::serverThread(qintptr sockDesc, QObject *parent):
QThread(parent),
m_sockDesc(sockDesc)
{
qRegisterMetaType<qintptr>("qintptr");
}
serverThread::~serverThread() //当线程容器本身消亡时 断开其控制的Socket连接
{
m_socket->close();
}
void serverThread::run(void) //线程容器这辈子要干的事
{
m_socket = new MySocket(m_sockDesc);
if (!m_socket->setSocketDescriptor(m_sockDesc)) //向套接字设立唯一标识符
{
return ;
}
connect(m_socket, &MySocket::disconnected, this, &serverThread::disconnectToHost); //当Socket套接字连接断开时当前线程容器怎么做
connect(m_socket, SIGNAL(IMGdataReady(const QString&, const QByteArray&, QString)),//Save 这里只是线程容器把Socket接收到的信息转发至Server套接字列表
this, SLOT(IMGrecvDataSlot(const QString&, const QByteArray&, QString)));
connect(m_socket, SIGNAL(LiveViewIMG(qintptr, QImage)),//Live View 这里只是线程容器把Socket接收到的信息转发至Server套接字列表
this, SLOT(LiveViewIMGSlot(qintptr, QImage)));
connect(this, SIGNAL(sendData(QString, const QByteArray&)), //传递Server要求某套接字发送信息
m_socket, SLOT(sendData(QString, const QByteArray&)));
m_sockDesc_IP= m_socket->peerAddress().toString().remove(0, 7);
emit ShowIP(m_sockDesc_IP);//把这个socket连接的IP告知Server
this->exec();//这个位置?
}
void serverThread::sendDataSlot(QString IP, const QByteArray &data) //中转 由Server告知某Socket发送信息
{
if (data.isEmpty())
{
return ;
}
emit sendData(IP, data);
}
void serverThread::IMGrecvDataSlot(const QString &ip, const QByteArray &data ,QString ImgName) //中转 Socket把要存储的照片交付Server
{
emit IMGdataReady(ip, data,ImgName);
}
void serverThread::LiveViewIMGSlot(qintptr id , QImage img) //中转 Socket把要预览的照片交付
{
emit LiveViewIMG(id,img);
}
void serverThread::disconnectToHost()//告知总ServerList容器里的套接字已经结束连接 同时线程容器本身也就没用了
{
emit disconnectTCP(m_sockDesc_IP);
m_socket->disconnectFromHost();
this->quit();
}