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

105
CapServer/SocketServer.cpp Normal file
View File

@@ -0,0 +1,105 @@
#include <common/OpenFile.hpp>
#include <common/systime.hpp>
#include <common/diskinfo.hpp>
#include <CapServer/SocketServer.hpp>
#include <CapServer/SocketHeader.hpp>
SocketServer::SocketServer(const String &host,int port,int deviceIndex,bool retain,bool debug,bool showSrcDlg,int timeout)
: mWDMCap(deviceIndex), mDebug(debug)
{
if(showSrcDlg)mWDMCap.dialogVideoSource();
if(retain)mMonitorThread.startMonitor(host,port,timeout);
}
SocketServer::~SocketServer()
{
mMonitorThread.stopMonitor();
}
void SocketServer::acceptHandler(SmartPointer<Socket> &socketControl)
{
if(mDebug)sendDebugFrame(*socketControl);
else sendFrame(*socketControl);
}
void SocketServer::message(const String &string)
{
::printf("%s\n",string.str());
}
void SocketServer::sendFrame(Socket &socketControl)
{
DiskInfo diskInfo;
SystemTime systemTime;
String strPathCaptureFile;
SocketHeader socketHeader;
Array<BYTE> charBytes;
FileHandle openFile;
DWORD elapsedTime;
socketHeader.setVersion(1);
socketHeader.setContentType(SocketHeader::ImageJPG);
socketHeader.setContentLength(0);
strPathCaptureFile.reserve(1024);
::sprintf(strPathCaptureFile,"%04d%02d%02d%02d%02d%02d%02d.jpg",
systemTime.year(),systemTime.month(),systemTime.day(),
systemTime.hour(),systemTime.minute(),systemTime.second(),
systemTime.milliseconds());
elapsedTime=::GetTickCount();
mWDMCap.setCaptureFileName(strPathCaptureFile);
mWDMCap.grabFrameNoStop();
elapsedTime=::GetTickCount()-elapsedTime;
message(String("[SocketServer::sendFrame] Grab frame took ")+String().fromInt(elapsedTime)+String(" (ms)"));
if(!openFile.open(strPathCaptureFile,FileHandle::Read,FileHandle::ShareRead))
{
socketHeader.marshall(socketControl);
}
else
{
charBytes.size(openFile.size());
socketHeader.setContentLength(charBytes.size());
elapsedTime=::GetTickCount();
openFile.read((BYTE*)&charBytes[0],charBytes.size());
elapsedTime=::GetTickCount()-elapsedTime;
message(String("[SocketServer::sendFrame] Read ")+String().fromInt(charBytes.size())+String(" bytes took ")+String().fromInt(elapsedTime)+String(" (ms)"));
elapsedTime=::GetTickCount();
socketHeader.marshall(socketControl);
socketControl.send((char*)&charBytes[0],charBytes.size());
elapsedTime=::GetTickCount()-elapsedTime;
message(String("[SocketServer::sendFrame] Send ")+String().fromInt(charBytes.size())+String(" bytes took ")+String().fromInt(elapsedTime)+String(" (ms)"));
openFile.close();
diskInfo.unlink(strPathCaptureFile);
}
message(String("[SocketServer::sendFrame]Sent ")+String().fromInt(charBytes.size())+String(" bytes"));
return;
}
void SocketServer::sendDebugFrame(Socket &socketControl)
{
DiskInfo diskInfo;
Array<BYTE> charBytes;
FileHandle openFile;
SocketHeader socketHeader;
String strPathFileName;
strPathFileName="./image.jpg";
socketHeader.setVersion(1);
socketHeader.setContentType(SocketHeader::ImageJPG);
socketHeader.setContentLength(0);
if(!openFile.open(strPathFileName,FileHandle::Read,FileHandle::ShareRead))
{
message("[SocketServer::sendDebugFrame] 'image.jpg' was not found, sending empty content");
socketHeader.marshall(socketControl);
}
else
{
charBytes.size(openFile.size());
socketHeader.setContentLength(charBytes.size());
openFile.read((BYTE*)&charBytes[0],charBytes.size());
socketHeader.marshall(socketControl);
socketControl.send((char*)&charBytes[0],charBytes.size());
message(String("[SocketServer::sendDebugFrame] Send ")+String().fromInt(charBytes.size()));
openFile.close();
}
}