This commit is contained in:
2024-08-07 09:12:07 -04:00
parent ca445435a0
commit fdfadd5c7e
1021 changed files with 73601 additions and 0 deletions

161
CapServer/MonitorThread.cpp Normal file
View File

@@ -0,0 +1,161 @@
#include <common/windows.hpp>
#include <common/array.hpp>
#include <common/openfile.hpp>
#include <CapServer/MonitorThread.hpp>
#include <CapServer/SocketHeader.hpp>
#include <socket/socket.hpp>
#include <socket/hostent.hpp>
MonitorThread::MonitorThread()
: mIsRunning(false), mTimeout(DefaultTimeout)
{
mCallback.setCallback(this,&MonitorThread::threadCallback);
insertHandler(&mCallback);
}
MonitorThread::~MonitorThread()
{
stop();
removeHandler(&mCallback);
}
void MonitorThread::startMonitor(const String &host,int port,DWORD timeout)
{
message("MonitorThread::startMonitor");
ThreadMessage threadMessage(ThreadMessage::TM_USER,MsgMonitorStart);
mHost=host;
mPort=port;
mTimeout=timeout;
getHostAddress();
postMessage(threadMessage);
}
void MonitorThread::stopMonitor(void)
{
message("MonitorThread::startMonitor");
ThreadMessage threadMessage(ThreadMessage::TM_USER,MsgMonitorStop);
postMessage(threadMessage);
mMonitorEvent.waitEvent();
}
DWORD MonitorThread::threadCallback(ThreadMessage &threadMessage)
{
switch(threadMessage.message())
{
case ThreadMessage::TM_CREATE :
break;
case ThreadMessage::TM_DESTROY :
break;
case ThreadMessage::TM_USER :
switch(MonitorThMsg(threadMessage.userDataOne()))
{
case MsgMonitorStart :
handleMonitorStart();
break;
case MsgMonitorStop :
handleMonitorStop();
break;
}
break;
}
return 0;
}
void MonitorThread::handleMonitorStart()
{
DWORD elapsedTime;
message("[MonitorThread::handleMonitorStart]ENTER");
mIsRunning=true;
message(String("[MonitorThread::handleMonitorStart]InitDelay=")+String().fromInt(InitDelay)+String(" (ms)."));
::Sleep(InitDelay);
while(mIsRunning)
{
elapsedTime=::GetTickCount();
getImage();
elapsedTime=::GetTickCount()-elapsedTime;
message("[MonitorThread::handleMonitorStart]GetImage Took "+String().fromInt(elapsedTime)+String(" (ms)."));
::Sleep(mTimeout);
}
message("]MonitorThread::handleMonitorStart]LEAVE");
}
void MonitorThread::handleMonitorStop()
{
message("[MonitorThread::handleMonitorStop]ENTER");
message("[MonitorThread::handleMonitorStop]LEAVE");
mIsRunning=false;
}
void MonitorThread::getHostAddress()
{
Block<InternetAddress> internetAddresses;
HostEnt hostEnt;
hostEnt.hostByName(mHost);
internetAddresses=hostEnt.addresses();
if(!internetAddresses.size())return;
for(int index=0;index<internetAddresses.size();index++)
{
message(String("[MonitorThread::getHostAddress]")+mHost+String("->")+internetAddresses[0].toString());
}
mInternetAddress=internetAddresses[0];
}
void MonitorThread::getImage()
{
INETSocketAddress internetSocketAddress;
Socket socket;
SocketHeader socketHeader;
Array<BYTE> content;
message("[MonitorThread::getImage]starting client");
internetSocketAddress.family(PF_INET);
internetSocketAddress.port(mPort);
internetSocketAddress.internetAddress(mInternetAddress);
if(!socket.create())
{
message("[MonitorThread::getImage]create socket failed...");
return;
}
if(!socket.connect(internetSocketAddress))
{
message(String("[MonitorThread::getImage]connect to '")+internetSocketAddress.toString()+String("' failed..."));
return;
}
message("[MonitorThread::getImage]reading socket header...");
socketHeader.unmarshall(socket);
message("[MonitorThread::getImage]header length",socketHeader.getSizeHeader());
message("[MonitorThread::getImage]version",socketHeader.getVersion());
message("[MonitorThread::getImage]content length",socketHeader.getContentLength());
message("[MonitorThread::getImage]content type",(int)socketHeader.getContentType());
content.size(socketHeader.getContentLength());
message("[MonitorThread::getImage]reading content...");
socket.receive((char*)&content[0],content.size());
saveImage(content);
message("[MonitorThread::getImage]done...");
socket.destroy();
}
bool MonitorThread::saveImage(Array<BYTE> &imageData)
{
SystemTime systemTime;
String strPathImageFile;
FileHandle openFile;
if(!imageData.size())return message("[MonitorThread::saveImage] No Data"),false;
strPathImageFile.reserve(1024);
::sprintf(strPathImageFile,"%04d%02d%02d%02d%02d%02d%02d.jpg",
systemTime.year(),systemTime.month(),systemTime.day(),
systemTime.hour(),systemTime.minute(),systemTime.second(),
systemTime.milliseconds());
if(!openFile.open(strPathImageFile,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite))
{
message(String("[MonitorThread::saveImage]Open '")+strPathImageFile+String("' for write Failed."));
return false;
}
openFile.write(&imageData[0],imageData.size());
openFile.close();
return true;
}