126 lines
4.6 KiB
C++
126 lines
4.6 KiB
C++
#include <CapServer/MainApplication.hpp>
|
|
|
|
MainApplication::MainApplication()
|
|
{
|
|
}
|
|
|
|
MainApplication::~MainApplication()
|
|
{
|
|
}
|
|
|
|
int MainApplication::run(int argc,char **argv)
|
|
{
|
|
String command;
|
|
|
|
mParams.setArgs(argc,argv);
|
|
switch(mParams.getRequest())
|
|
{
|
|
case Params::Client :
|
|
mParams.showParams();
|
|
handleClient(mParams.getServer(),mParams.getPort().toInt());
|
|
break;
|
|
case Params::Server :
|
|
mParams.showParams();
|
|
handleServer(mParams.getHost(),mParams.getPort().toInt(),mParams.getTimeout().toInt(),mParams.getDevice().toInt(),mParams.getRetain(),mParams.getDebug(),mParams.getShowSrcDlg());
|
|
break;
|
|
case Params::Settings :
|
|
mParams.showParams();
|
|
handleSettings(mParams.getShowSrcDlg());
|
|
break;
|
|
case Params::None :
|
|
displayUsage();
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void MainApplication::handleServer(const String &host,int port,int timeout,int deviceIndex,bool retain,bool debug,bool showSrcDlg)
|
|
{
|
|
message("[MainApplication::handleServer]starting server");
|
|
SocketServer socketServer(host,port,deviceIndex,retain,debug,showSrcDlg,timeout);
|
|
socketServer.listen(host,port);
|
|
}
|
|
|
|
void MainApplication::handleClient(const String &host,int port)
|
|
{
|
|
INETSocketAddress internetSocketAddress;
|
|
InternetAddress internetAddress(127,0,0,1);
|
|
Socket socket;
|
|
SocketHeader socketHeader;
|
|
Array<BYTE> content;
|
|
|
|
message("[MainApplication::handleClient]starting client");
|
|
internetSocketAddress.family(PF_INET);
|
|
internetSocketAddress.port(1024);
|
|
internetSocketAddress.internetAddress(internetAddress);
|
|
if(!socket.create())
|
|
{
|
|
message("[MainApplication::handleClient]create failed...");
|
|
return;
|
|
}
|
|
if(!socket.connect(internetSocketAddress))
|
|
{
|
|
message("[MainApplication::handleClient]connect failed...");
|
|
return;
|
|
}
|
|
message("[MainApplication::handleClient]reading socket header...");
|
|
socketHeader.unmarshall(socket);
|
|
message("[MainApplication::handleClient]header length",socketHeader.getSizeHeader());
|
|
message("[MainApplication::handleClient]version",socketHeader.getVersion());
|
|
message("[MainApplication::handleClient]content length",socketHeader.getContentLength());
|
|
message("[MainApplication::handleClient]content type",(int)socketHeader.getContentType());
|
|
content.size(socketHeader.getContentLength());
|
|
message("[MainApplication::handleClient]reading content...");
|
|
socket.receive((char*)&content[0],content.size());
|
|
message("[MainApplication::handleClient]done...");
|
|
socket.destroy();
|
|
}
|
|
|
|
void MainApplication::handleSettings(bool showSrcDlg)
|
|
{
|
|
VidReg vidReg;
|
|
Block<DriverInfo> driverInfoBlock;
|
|
|
|
VidCap::getDrivers(driverInfoBlock);
|
|
message("[MainApplication::handleSettings]Capture File",vidReg.getCaptureFile());
|
|
message("[MainApplication::handleSettings]Sequencing",vidReg.getSequencing()?"true":"false");
|
|
message("[MainApplication::handleSettings]Preview Rate",vidReg.getPreviewRate());
|
|
message("[MainApplication::handleSettings]Preview Width",vidReg.getPreviewWidth());
|
|
message("[MainApplication::handleSettings]Preview Height",vidReg.getPreviewHeight());
|
|
message("[MainApplication::handleSettings]Capture Width",vidReg.getCaptureWidth());
|
|
message("[MainApplication::handleSettings]Capture Height",vidReg.getCaptureHeight());
|
|
message("[MainApplication::handleSettings]Capture Quality",vidReg.getQuality());
|
|
message("[MainApplication::handleSettings]***********CAPTURE DEVICE LIST*********");
|
|
if(!driverInfoBlock.size())message("[MainApplication::handleSettings]No capture devices on system.");
|
|
for(int index=0;index<driverInfoBlock.size();index++)
|
|
{
|
|
WDMCap wdmCap(index);
|
|
if(wdmCap.isConnected())
|
|
{
|
|
message(String("[MainApplication::handleSettings]")+driverInfoBlock[index].driverName()+String(" ***Available"));
|
|
if(showSrcDlg)wdmCap.dialogVideoSource();
|
|
}
|
|
else message(String("[MainApplication::handleSettings]")+driverInfoBlock[index].driverName()+String(" ***Unavailable"));
|
|
}
|
|
}
|
|
|
|
void MainApplication::displayUsage(void)
|
|
{
|
|
message("CapServer [run host port device retain debug showsrcdlg]");
|
|
message(" run={server} | {client} | {settings}");
|
|
message(" server=<servername> | <serveraddress>");
|
|
message(" host=<hostname> | <hostaddress>");
|
|
message(" port=<port>");
|
|
message(" device=<index>");
|
|
message(" retain={true} | {false}");
|
|
message(" debug={true} | {false}");
|
|
message(" showsrcdlg={true} | {false}");
|
|
message(" timeout=<value> (Delay between frame grab for retain mode. (ms))");
|
|
message(" ");
|
|
message(" CapServer run=server host=127.0.0.1 port=1024");
|
|
message(" CapServer run=server host=127.0.0.1 port=1024 device=0");
|
|
message(" CapServer run=client server=127.0.0.1 port=1024");
|
|
message(" CapServer run=settings");
|
|
}
|
|
|