diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2013-12-31 12:54:42 +0100 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2013-12-31 12:54:42 +0100 | 
| commit | edcdcaadb5920cebc9aaa34572cba74de5637241 (patch) | |
| tree | d6d1b193cb0486445b391fbdc3bff58a0b6151fb /ftnoir_protocol_ftn | |
| parent | e1d96c01dc5d7707c7e3a260f49881e6bded832e (diff) | |
udp: update to settings framework
Diffstat (limited to 'ftnoir_protocol_ftn')
| -rw-r--r-- | ftnoir_protocol_ftn/ftnoir_protocol_ftn.cpp | 79 | ||||
| -rw-r--r-- | ftnoir_protocol_ftn/ftnoir_protocol_ftn.h | 46 | ||||
| -rw-r--r-- | ftnoir_protocol_ftn/ftnoir_protocol_ftn_dialog.cpp | 105 | ||||
| -rw-r--r-- | ftnoir_protocol_ftn/ftnoir_protocol_ftn_dll.cpp | 18 | 
4 files changed, 41 insertions, 207 deletions
diff --git a/ftnoir_protocol_ftn/ftnoir_protocol_ftn.cpp b/ftnoir_protocol_ftn/ftnoir_protocol_ftn.cpp index 80cbfa0a..e93a751e 100644 --- a/ftnoir_protocol_ftn/ftnoir_protocol_ftn.cpp +++ b/ftnoir_protocol_ftn/ftnoir_protocol_ftn.cpp @@ -32,86 +32,23 @@  /** constructor **/  FTNoIR_Protocol::FTNoIR_Protocol()  { -	loadSettings(); -    outSocket = 0;  } -/** destructor **/ -FTNoIR_Protocol::~FTNoIR_Protocol() -{ -	if (outSocket != 0) { -		outSocket->close(); -		delete outSocket; -	} -} - -// -// Load the current Settings from the currently 'active' INI-file. -// -void FTNoIR_Protocol::loadSettings() { -	QSettings settings("opentrack");	// Registry settings (in HK_USER) - -	QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); -	QSettings iniFile( currentFile, QSettings::IniFormat );		// Application settings (in INI-file) - -	iniFile.beginGroup ( "FTN" ); - -	QString destAddr = iniFile.value ( "IP-1", 192 ).toString() + "." + iniFile.value ( "IP-2", 168 ).toString() + "." + iniFile.value ( "IP-3", 2 ).toString() + "." + iniFile.value ( "IP-4", 1 ).toString(); -	destIP = QHostAddress( destAddr ); -    destPort = iniFile.value ( "PortNumber", 5550 ).toInt(); - -	iniFile.endGroup (); -} - -// -// Update Headpose in Game. -//  void FTNoIR_Protocol::sendHeadposeToGame(const double *headpose) { -    int no_bytes; -    double test_data[6]; -	// -	// Copy the Raw measurements directly to the client. -	// -    for (int i = 0; i < 6; i++) -        test_data[i] = headpose[i]; -	// -	// Try to send an UDP-message to the receiver -	// - -	//! [1] -	if (outSocket != 0) { -        no_bytes = outSocket->writeDatagram((const char *) test_data, sizeof( test_data ), destIP, destPort); -		if ( no_bytes > 0) { -//		qDebug() << "FTNServer::writePendingDatagrams says: bytes send =" << no_bytes << sizeof( double ); -		} -		else { -			qDebug() << "FTNServer::writePendingDatagrams says: nothing sent!"; -		} -	} +    int destPort = s.port; +    QHostAddress destIP(QString("%1.%2.%3.%4").arg( +                            QString::number(static_cast<int>(s.ip1)), +                            QString::number(static_cast<int>(s.ip2)), +                            QString::number(static_cast<int>(s.ip3)), +                            QString::number(static_cast<int>(s.ip4)))); +    outSocket.writeDatagram((const char *) headpose, sizeof( double[6] ), destIP, destPort);  } -// -// Check if the Client DLL exists and load it (to test it), if so. -// Returns 'true' if all seems OK. -//  bool FTNoIR_Protocol::checkServerInstallationOK()  {    -	if (outSocket == 0) { -		outSocket = new QUdpSocket(); -	} - -	return true; +    return outSocket.bind(QHostAddress::Any, 0, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);  } -//////////////////////////////////////////////////////////////////////////////// -// Factory function that creates instances if the Protocol object. - -// Export both decorated and undecorated names. -//   GetProtocol     - Undecorated name, which can be easily used with GetProcAddress -//                Win32 API function. -//   _GetProtocol@0  - Common name decoration for __stdcall functions in C language. -//#pragma comment(linker, "/export:GetProtocol=_GetProtocol@0") -  extern "C" FTNOIR_PROTOCOL_BASE_EXPORT IProtocol* CALLING_CONVENTION GetConstructor()  {      return new FTNoIR_Protocol; diff --git a/ftnoir_protocol_ftn/ftnoir_protocol_ftn.h b/ftnoir_protocol_ftn/ftnoir_protocol_ftn.h index acccc9e7..d5dc2cfe 100644 --- a/ftnoir_protocol_ftn/ftnoir_protocol_ftn.h +++ b/ftnoir_protocol_ftn/ftnoir_protocol_ftn.h @@ -26,8 +26,6 @@  *					It is based on the (Linux) example made by Melchior FRANZ.	*  ********************************************************************************/  #pragma once -#ifndef INCLUDED_FTNSERVER_H -#define INCLUDED_FTNSERVER_H  #include "ftnoir_protocol_base/ftnoir_protocol_base.h"  #include "ftnoir_tracker_base/ftnoir_tracker_base.h" @@ -38,23 +36,34 @@  #include <QSettings>  #include <math.h>  #include "facetracknoir/global-settings.h" +#include "facetracknoir/options.h" +using namespace options; + +struct settings { +    pbundle b; +    value<int> ip1, ip2, ip3, ip4, port; +    settings() : +        b(bundle("udp-proto")), +        ip1(b, "ip1", 192), +        ip2(b, "ip2", 168), +        ip3(b, "ip3", 0), +        ip4(b, "ip4", 2), +        port(b, "port", 4242) +    {} +};  class FTNoIR_Protocol : public IProtocol  {  public:  	FTNoIR_Protocol(); -    virtual ~FTNoIR_Protocol();      bool checkServerInstallationOK();      void sendHeadposeToGame(const double *headpose);      QString getGameName() {          return "UDP Tracker";      } -  private: -	QUdpSocket *outSocket;									// Send to FaceTrackNoIR -	QHostAddress destIP;									// Destination IP-address -	int destPort;											// Destination port-number -	void loadSettings(); +    QUdpSocket outSocket; +    settings s;  };  // Widget that has controls for FTNoIR protocol client-settings. @@ -62,40 +71,23 @@ class FTNControls: public QWidget, public IProtocolDialog  {      Q_OBJECT  public: - -	explicit FTNControls(); +    FTNControls();      void registerProtocol(IProtocol *) {}      void unRegisterProtocol() {} -  private:  	Ui::UICFTNControls ui; -	void loadSettings(); -	void save(); - -	/** helper **/ -	bool settingsDirty; - +    settings s;  private slots:  	void doOK();  	void doCancel(); -    void settingChanged() { settingsDirty = true; }  }; -//******************************************************************************************************* -// FaceTrackNoIR Protocol DLL. Functions used to get general info on the Protocol -//*******************************************************************************************************  class FTNoIR_ProtocolDll : public Metadata  {  public: -	FTNoIR_ProtocolDll(); -	~FTNoIR_ProtocolDll(); -      void getFullName(QString *strToBeFilled) { *strToBeFilled = QString("UDP"); }      void getShortName(QString *strToBeFilled) { *strToBeFilled = QString("UDP"); }      void getDescription(QString *strToBeFilled) { *strToBeFilled = QString("opentrack UDP protocol"); }      void getIcon(QIcon *icon) { *icon = QIcon(":/images/facetracknoir.png"); }  }; - -#endif//INCLUDED_FTNSERVER_H -//END diff --git a/ftnoir_protocol_ftn/ftnoir_protocol_ftn_dialog.cpp b/ftnoir_protocol_ftn/ftnoir_protocol_ftn_dialog.cpp index 72c30051..ce4b3cb0 100644 --- a/ftnoir_protocol_ftn/ftnoir_protocol_ftn_dialog.cpp +++ b/ftnoir_protocol_ftn/ftnoir_protocol_ftn_dialog.cpp @@ -23,44 +23,28 @@  *																				*  ********************************************************************************/  #include "ftnoir_protocol_ftn.h" -#include <QDebug>  #include "facetracknoir/global-settings.h" -//******************************************************************************************************* -// FaceTrackNoIR Client Settings-dialog. -//******************************************************************************************************* - -// -// Constructor for server-settings-dialog -//  FTNControls::FTNControls() : -QWidget() +    QWidget()  { -	ui.setupUi( this ); - -	QPoint offsetpos(100, 100); -	//if (parent) { -	//	this->move(parent->pos() + offsetpos); -	//} +    ui.setupUi( this ); -	// Connect Qt signals to member-functions -	connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK())); -	connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel())); -	connect(ui.spinIPFirstNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); -	connect(ui.spinIPSecondNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); -	connect(ui.spinIPThirdNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); -	connect(ui.spinIPFourthNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); -	connect(ui.spinPortNumber, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); +    tie_setting(s.ip1, ui.spinIPFirstNibble); +    tie_setting(s.ip2, ui.spinIPSecondNibble); +    tie_setting(s.ip3, ui.spinIPThirdNibble); +    tie_setting(s.ip4, ui.spinIPFourthNibble); +    tie_setting(s.port, ui.spinPortNumber); -	// Load the settings from the current .INI-file -	loadSettings(); +    connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK())); +    connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel()));  }  //  // OK clicked on server-dialog  //  void FTNControls::doOK() { -	save(); +    s.b->save();  	this->close();  } @@ -68,27 +52,19 @@ void FTNControls::doOK() {  // Cancel clicked on server-dialog  //  void FTNControls::doCancel() { -	// -	// Ask if changed Settings should be saved -	// -	if (settingsDirty) { -		int ret = QMessageBox::question ( this, "Settings have changed", "Do you want to save the settings?", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Discard ); - -		qDebug() << "doCancel says: answer =" << ret; - +    if (s.b->modifiedp()) { +        int ret = QMessageBox::question ( this, "Settings have changed", "Do you want to save the settings?", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);  		switch (ret) {  			case QMessageBox::Save: -				save(); +                s.b->save();  				this->close();  				break;  			case QMessageBox::Discard: +                s.b->revert();  				this->close();  				break;  			case QMessageBox::Cancel: -				// Cancel was clicked -				break;  			default: -				// should never be reached  			break;  		}  	} @@ -97,59 +73,6 @@ void FTNControls::doCancel() {  	}  } -// -// Load the current Settings from the currently 'active' INI-file. -// -void FTNControls::loadSettings() { -//	qDebug() << "loadSettings says: Starting "; -	QSettings settings("opentrack");	// Registry settings (in HK_USER) - -	QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); -	QSettings iniFile( currentFile, QSettings::IniFormat );		// Application settings (in INI-file) - -//	qDebug() << "loadSettings says: iniFile = " << currentFile; - -	iniFile.beginGroup ( "FTN" ); -	ui.spinIPFirstNibble->setValue( iniFile.value ( "IP-1", 192 ).toInt() ); -	ui.spinIPSecondNibble->setValue( iniFile.value ( "IP-2", 168 ).toInt() ); -	ui.spinIPThirdNibble->setValue( iniFile.value ( "IP-3", 2 ).toInt() ); -	ui.spinIPFourthNibble->setValue( iniFile.value ( "IP-4", 1 ).toInt() ); - -	ui.spinPortNumber->setValue( iniFile.value ( "PortNumber", 5550 ).toInt() ); -	iniFile.endGroup (); - -	settingsDirty = false; -} - -// -// Save the current Settings to the currently 'active' INI-file. -// -void FTNControls::save() { -	QSettings settings("opentrack");	// Registry settings (in HK_USER) - -	QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); -	QSettings iniFile( currentFile, QSettings::IniFormat );		// Application settings (in INI-file) - -	iniFile.beginGroup ( "FTN" ); -	iniFile.setValue ( "IP-1", ui.spinIPFirstNibble->value() ); -	iniFile.setValue ( "IP-2", ui.spinIPSecondNibble->value() ); -	iniFile.setValue ( "IP-3", ui.spinIPThirdNibble->value() ); -	iniFile.setValue ( "IP-4", ui.spinIPFourthNibble->value() ); -	iniFile.setValue ( "PortNumber", ui.spinPortNumber->value() ); -	iniFile.endGroup (); - -	settingsDirty = false; -} - -//////////////////////////////////////////////////////////////////////////////// -// Factory function that creates instances if the Protocol-settings dialog object. - -// Export both decorated and undecorated names. -//   GetProtocolDialog     - Undecorated name, which can be easily used with GetProcAddress -//                          Win32 API function. -//   _GetProtocolDialog@0  - Common name decoration for __stdcall functions in C language. -//#pragma comment(linker, "/export:GetProtocolDialog=_GetProtocolDialog@0") -  extern "C" FTNOIR_PROTOCOL_BASE_EXPORT IProtocolDialog* CALLING_CONVENTION GetDialog( )  {      return new FTNControls; diff --git a/ftnoir_protocol_ftn/ftnoir_protocol_ftn_dll.cpp b/ftnoir_protocol_ftn/ftnoir_protocol_ftn_dll.cpp index acd3b990..99689432 100644 --- a/ftnoir_protocol_ftn/ftnoir_protocol_ftn_dll.cpp +++ b/ftnoir_protocol_ftn/ftnoir_protocol_ftn_dll.cpp @@ -23,26 +23,8 @@  *																				*  ********************************************************************************/  #include "ftnoir_protocol_ftn.h" -#include <QDebug>  #include "facetracknoir/global-settings.h" -FTNoIR_ProtocolDll::FTNoIR_ProtocolDll() { -} - -FTNoIR_ProtocolDll::~FTNoIR_ProtocolDll() -{ - -} - -//////////////////////////////////////////////////////////////////////////////// -// Factory function that creates instances if the Protocol object. - -// Export both decorated and undecorated names. -//   GetProtocolDll     - Undecorated name, which can be easily used with GetProcAddress -//						Win32 API function. -//   _GetProtocolDll@0  - Common name decoration for __stdcall functions in C language. -//#pragma comment(linker, "/export:GetProtocolDll=_GetProtocolDll@0") -  extern "C" FTNOIR_PROTOCOL_BASE_EXPORT Metadata* CALLING_CONVENTION GetMetadata()  {  	return new FTNoIR_ProtocolDll;  | 
