Initial
This commit is contained in:
103
CapServer/hold/SocketServer.cpp
Normal file
103
CapServer/hold/SocketServer.cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
#include <common/OpenFile.hpp>
|
||||
#include <common/systime.hpp>
|
||||
#include <common/diskinfo.hpp>
|
||||
#include <CapServer/SocketServer.hpp>
|
||||
#include <CapServer/SocketHeader.hpp>
|
||||
|
||||
SocketServer::SocketServer(int deviceIndex,bool retain,bool debug,bool showSrcDlg)
|
||||
: mWDMCap(deviceIndex), mRetainImage(retain), mDebug(debug)
|
||||
{
|
||||
if(showSrcDlg)mWDMCap.dialogVideoSource();
|
||||
}
|
||||
|
||||
SocketServer::~SocketServer()
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
if(!mRetainImage)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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user