Commit 9a0df0c0 authored by Jonas Stienen's avatar Jonas Stienen

Initial project checkin

parents
# $Id:$
cmake_minimum_required( VERSION 2.8 )
project( VANet )
list( APPEND CMAKE_MODULE_PATH "$ENV{VISTA_CMAKE_COMMON}" )
include( VistaCommon )
vista_use_package( VistaCoreLibs REQUIRED COMPONENTS VistaInterProcComm )
vista_use_package( VABase REQUIRED )
if( NOT DEFINED ITA_VANET_WITH_VISTACORELIBS_GREATER_1_15 )
set( ITA_VANET_WITH_VISTACORELIBS_GREATER_1_15 OFF CACHE BOOL "SetWaitForDescriptorEventSelectIsEnabled available in VistaCoreLibs?" )
endif( NOT DEFINED ITA_VANET_WITH_VISTACORELIBS_GREATER_1_15 )
# Including the source files of all source subfolders recursively
include( "include/_SourceFiles.cmake" )
include( "src/_SourceFiles.cmake" )
include_directories( "include" )
add_definitions( -DVABASE_DLL -DVANET_DLL -DVANET_EXPORTS )
if( ITA_VANET_WITH_VISTACORELIBS_GREATER_1_15 )
add_definitions( -DVISTACORELIBS_VERSION_GREATER_1_15 )
endif( ITA_VANET_WITH_VISTACORELIBS_GREATER_1_15 )
add_library( VANet "${ProjectSources}" )
target_link_libraries( VANet ${VISTA_USE_PACKAGE_LIBRARIES} )
# configure
vista_configure_lib( VANet )
vista_install( VANet )
set( VANET_INCLUDE_OUTDIR "${CMAKE_CURRENT_SOURCE_DIR}/include" )
vista_create_cmake_configs( VANet )
vista_create_default_info_file( VANet )
set_property( TARGET VANet PROPERTY FOLDER "VA" )
# tests
set( VANET_COMMON_BUILD TRUE )
add_subdirectory( "${CMAKE_CURRENT_SOURCE_DIR}/tests" )
# apps
set( VANET_COMMON_BUILD TRUE )
add_subdirectory( "${CMAKE_CURRENT_SOURCE_DIR}/apps" )
/*
*
* VVV VVV A
* VVV VVV AAA Virtual Acoustics
* VVV VVV AAA Real-time auralisation for virtual reality
* VVV VVV AAA
* VVVVVV AAA (c) Copyright Institut fr Technische Akustik (ITA)
* VVVV AAA RWTH Aachen (http://www.akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*
* Datei: VANetAudiostreamReceiver.h
*
* Zweck: Receiver-side implementation of a network audio stream
*
* Autor(en): Frank Wefers (Frank.Wefers@akustik.rwth-aachen.de),
* Dominik Rausch (rausch@vr.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*/
// $Id: VANetAudiostreamReceiver.h 4150 2015-08-03 15:47:50Z fwefers $
#ifndef __VANET_AUDIOSTREAM_RECEIVER_H__
#define __VANET_AUDIOSTREAM_RECEIVER_H__
#include <VANetDefinitions.h>
#include <string>
// Vorwrtsdeklarationen
class CVAAudiostreamProperties;
class CVAAudiostreamState;
/**
* Sender-side implementation of a network audio stream,
* which transfers samples over TCP network to a audiostream receiver
* Sender and receiver are in an 1:1 relation.
*/
class VANET_API CVANetAudiostreamSender {
public:
//! Rckgabewerte / Fehlerzustnde
enum {
VA_NO_ERROR = 0, //!< No error
VA_CONNECTION_LOST, //!< Connection to sender unexpectedly lost
VA_BUFFER_UNDERRUN //!< Not enough samples in the receive buffer
};
CVANetAudiostreamSender(const std::string sSenderAddress, int iSenderPort,
const std::string& sTargetName,
const CVAAudiostreamProperties& oStreamProps,
int iFlags);
virtual ~CVANetAudiostreamSender();
// Gibt die Adresse des verbundenen Servers zurck
// (Rckgabe: leerer String, falls nicht verbunden)
virtual std::string GetSenderAddress() const=0;
// Receives a block of samples from the sender buffer
// Return: Status information (still connected, etc.)
int ReceiveSamples(const float* pfSamples, int iNumSamples);
};
#endif // __VANET_AUDIOSTREAM_RECEIVER_H__
/*
*
* VVV VVV A
* VVV VVV AAA Virtual Acoustics
* VVV VVV AAA Real-time auralisation for virtual reality
* VVV VVV AAA
* VVVVVV AAA (c) Copyright Institut fr Technische Akustik (ITA)
* VVVV AAA RWTH Aachen (http://www.akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*
* Datei: VANetAudiostreamSender.h
*
* Zweck: Sender-side implementation of a network audio stream
*
* Autor(en): Frank Wefers (Frank.Wefers@akustik.rwth-aachen.de),
* Dominik Rausch (rausch@vr.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*/
// $Id: VANetAudiostreamSender.h 4150 2015-08-03 15:47:50Z fwefers $
#ifndef __VANET_AUDIOSTREAM_SENDER_H__
#define __VANET_AUDIOSTREAM_SENDER_H__
#include <VANetDefinitions.h>
#include <string>
// Vorwrtsdeklarationen
class CVAAudiostreamProperties;
class CVAAudiostreamState;
/**
* Sender-side implementation of a network audio stream,
* which transfers samples over TCP network to a audiostream receiver
* Sender and receiver are in an 1:1 relation.
*/
class VANET_API CVANetAudiostreamReceiver {
public:
//! Rckgabewerte / Fehlerzustnde
enum {
VA_NO_ERROR = 0, //!< Kein Fehler / Erfolgreich
VA_SERVER_CONNECTION_FAILED, //!< Verbindung zum Server fehlgeschlagen - Falsche Addresse, oder Server luft nicht
VA_SERVER_NOT_RESPONDING, //!< Verbindung zum Server wurde aufgebaut, aber keine Antwort erhalten
VA_SERVICE_IN_USE, //!< Netzwerkdienst wird bereits von anderem Client benutzt
VA_CONNECTION_ERROR, //!< Ein unbekannter netzwerkfehler ist aufgetreten
VA_PROTOCOL_INCOMPATIBLE, //!< Das Netzwerkprotokoll von Client und Server ist inkompatibel
VA_UNKNOWN_ERROR,
};
CVANetAudiostreamReceiver();
virtual ~CVANetAudiostreamReceiver();
// Gibt die Adresse des verbundenen Servers zurck
// (Rckgabe: leerer String, falls nicht verbunden)
virtual std::string GetServerAddress() const=0;
// Client initialisieren und mit einem Server verbinden
// (Rckgabe: Statuscode)
virtual int Initialize(const std::string& sBindAddress, int iPort)=0;
void Finalize();
class VANET_API Handler {
public:
virtual ~Handler() {};
// Handle that the connection to a receiver is established
// Thereby the sender it told the expected stream properties (sampling rate, buffersize)
// and designated signal source name on the receiver-side (VA).
// Returns: Status code (0=Connection accepted, 1=Connection refused)
virtual int HandleReceiverConnect(const CVAAudiostreamProperties& oStreamProps,
const std::string& sSignalSourceName)=0;
// Informs that the connection to the receiver is closed
virtual void HandleReceiverDisconnect()=0;
// Receiver-side requests new samples from the sender
// Thereby the sender is informed about the current status of the audiostream
virtual void HandleReceiverRequestSamples(const CVAAudiostreamState& oStreamState)=0;
};
// Sets the handler for sender events
void SetEventHandler(Handler* pHandler);
// Pushes a block of samples into the sender buffer and transfers them to the client
// Return: Status information (still connected, etc.)
int SendSamples(const float* pfSamples, int iNumSamples);
};
#endif // __VANET_AUDIOSTREAM_SENDER_H__
/*
*
* VVV VVV A
* VVV VVV AAA Virtual Acoustics
* VVV VVV AAA Real-time auralisation for virtual reality
* VVV VVV AAA
* VVVVVV AAA (c) Copyright Institut fr Technische Akustik (ITA)
* VVVV AAA RWTH Aachen (http://www.akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*
* Datei: VANetClient.h
*
* Zweck: Schnittstelle des Netzwerk-Clients fr den VA-Kernel
*
* Autor(en): Frank Wefers (Frank.Wefers@akustik.rwth-aachen.de),
* Dominik Rausch (rausch@vr.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*/
// $Id: VANetClient.h 2732 2012-06-26 13:38:17Z fwefers $
#ifndef __VANET_CLIENT_H__
#define __VANET_CLIENT_H__
#include <VANetDefinitions.h>
#include <string>
// Vorwrtsdeklarationen
class IVACore;
class CVANetNetworkProtocol;
/**
* Diese Klasse definiert die Schnittstelle fr Netzwerk-Client des VACore.
* Es wird die vollstndige Schnittstelle IVACore ber das Netzwerk repliziert.
* Instanzen mssen mittels der factory method Create() erzeugt werden.
*
* Der Client erzeugt (nach erfolgreicher Verbindung) eine Client-seitige
* Implementierung der Schnittstelle IVACore, welche mittels der Methode
* GetCoreInstance() abgerufen werden kann. Alle Befehle, die auf dieser
* Instanz aufgerufen werden, leitet der Client dann an den zugeordneten
* Server weiter.
*
* TODO:
* - Der Client muss auch VACoreEvents von der Server-Seite weiterleiten
* - Redefinieren der Attach/DetachCoreEventHandler im Protokoll
*/
class VANET_API IVANetClient {
public:
//! Rckgabewerte / Fehlerzustnde
enum {
VA_NO_ERROR = 0, //!< Kein Fehler / Erfolgreich
VA_SERVER_CONNECTION_FAILED, //!< Verbindung zum Server fehlgeschlagen - Falsche Addresse, oder Server luft nicht
VA_SERVER_NOT_RESPONDING, //!< Verbindung zum Server wurde aufgebaut, aber keine Antwort erhalten
VA_SERVICE_IN_USE, //!< Netzwerkdienst wird bereits von anderem Client benutzt
VA_CONNECTION_ERROR, //!< Ein unbekannter netzwerkfehler ist aufgetreten
VA_PROTOCOL_INCOMPATIBLE, //!< Das Netzwerkprotokoll von Client und Server ist inkompatibel
VA_UNKNOWN_ERROR,
};
//HeadChannel Modi
enum {
VA_HC_USE_EXISTING = 0,
VA_HC_SEPARATE_TCP,
VA_HC_SEPARATE_UDP
};
// Exception Handling Modi
enum {
EXC_CLIENT_THROW, // for all functions, immediately transmit exception and throws it
//EXC_ASYNC_PRINT, // functions without return value immediately return,
// // and any exceptions are asynchronously transmitted to
// // the client and printed there
EXC_SERVER_PRINT, // functions without return value immediately return,
// and the exception is printed on the server
};
// Factory method
static IVANetClient* Create();
virtual ~IVANetClient();
// Client-seitige VACore-Instanz zurckgeben
virtual IVACore* GetCoreInstance() const=0;
// Gibt zurck, ob eine Verbindung zu einem Server besteht
virtual bool IsConnected() const=0;
// Gibt die Adresse des verbundenen Servers zurck
// (Rckgabe: leerer String, falls nicht verbunden)
virtual std::string GetServerAddress() const=0;
// Client initialisieren und mit einem Server verbinden
// (Rckgabe: Statuscode)
virtual int Initialize(const std::string& sServerAddress, int iServerPort=VANET_DEFAULT_PORT,
int iHeadChannelMode = VA_HC_USE_EXISTING,
int IExceptionHandlingMode = EXC_CLIENT_THROW,
bool bBufferSynchronizedCommands = true )=0;
virtual void SetExceptionHandlingMode( int nMode ) = 0;
virtual int GetExceptionhandlingMode() const = 0;
// Vorhandene Serververbindung beenden
// (Rckgabe: Statuscode)
virtual int Disconnect()=0;
class CEvent {
public:
enum {
EVENT_NOTHING = 0,
EVENT_SERVER_DISCONNECT, // Gewollter Verbindungsabbruch
EVENT_SERVER_LOST // Ungewollter Verbindungsabbruch
};
int iType; // Typ der Ereignisses
std::string sServer; //
CEvent() : iType(EVENT_NOTHING) {};
CEvent(int iInitType, const std::string& sInitServer)
: iType(iInitType), sServer(sInitServer) {};
};
class IEventHandler {
public:
virtual ~IEventHandler() {};
virtual void HandleEvent(const IVANetClient::CEvent& oEvent)=0;
};
virtual bool AttachEventHandler(IVANetClient::IEventHandler* pHandler)=0;
virtual bool DetachEventHandler(IVANetClient::IEventHandler* pHandler)=0;
protected:
IVANetClient();
};
#endif // __VANET_CLIENT_H__
/*
*
* VVV VVV A
* VVV VVV AAA Virtual Acoustics
* VVV VVV AAA Real-time auralisation for virtual reality
* VVV VVV AAA
* VVVVVV AAA (c) Copyright Institut fr Technische Akustik (ITA)
* VVVV AAA RWTH Aachen (http://www.akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*
* Datei: VANetDefinitions.h
*
* Zweck: Globale Definitionen der VANet-Bibliothek
*
* Autor(en): Frank Wefers (Frank.Wefers@akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*/
// $Id: VANetDefinitions.h 4530 2016-02-11 06:28:54Z stienen $
#ifndef __VANET_DEFINITIONS_H__
#define __VANET_DEFINITIONS_H__
// Import-/Export-Konventionen fr die Bibliothek definieren
#ifdef VANET_DLL
// Dynamische Bibliothek
#ifdef VANET_EXPORTS
#define VANET_API __declspec(dllexport)
#else
#define VANET_API __declspec(dllimport)
#endif
#else
// Statische Bibliothek
#define VANET_API
#endif
// Disable STL template-instantiiation warning with DLLs for Visual C++
#if defined (_MSC_VER)
#pragma warning(disable: 4251)
#endif
// Default port for servers and clients
#define VANET_DEFAULT_PORT 12340
// --= Version =-----------------------------------------------
#define VANET_VERSION_MAJOR 1
#define VANET_VERSION_MINOR 25
#define VANET_SVN_DATE "$Date: 2016-02-11 07:28:54 +0100 (Do, 11 Feb 2016) $"
#define VANET_SVN_REVISION "$Revision: 4530 $"
#endif // __VANET_DEFINITIONS_H__
/*
*
* VVV VVV A Virtual Acoustics
* VVV VVV AAA Real-time auralisation for virtual reality
* VVV VVV AAA
* VVV VVV AAA (c) Copyright Institute for Technical Acoustics (ITA)
* VVVVVV AAA RWTH Aachen University, Aachen Germany
* VVVV AAA (http://www.akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*
* File: VANetServer.h
*
* Purpose: Network server interface
*
* Authors: Frank Wefers (Frank.Wefers@akustik.rwth-aachen.de),
* Dominik Rausch (rausch@vr.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*/
// $Id: VANetServer.h 2732 2012-06-26 13:38:17Z fwefers $
#ifndef __VANET_SERVER_H__
#define __VANET_SERVER_H__
#include <VANetDefinitions.h>
#include <string>
#include <list>
// Forward declarations
class IVACore;
/**
* Diese Klasse definiert die Schnittstelle fr Netzwerk-Servers des VACore.
* Es wird die vollstndige Schnittstelle IVACore ber das Netzwerk repliziert.
* Instanzen mssen mittels der factory method Create() erzeugt werden.
*
* Der Server wird erzeugt und an eine Netzwerkschnittstelle+Port gebunden.
* Dem Server muss eine IVACore-Instanz genannt werden, an welche er die
* Netzwerkbefehle weiterleitet.
*
* Solange der Server aktiviert ist und ihm eine IVACore-Instanz zugeordnet ist,
* akzeptiert er eine (einzelne!) Client-Verbindung und leitet deren Befehle weiter.
* Ist bereits ein Client verbunden, schlgt die Verbindungsaufnahme fehl.
*
* Regel: Nur ein Client zu einer Zeit
*
* TODO:
* - Der Client muss auch VACoreEvents von der Server-Seite weiterleiten. Mechanismus entwickeln + implementieren
*/
class VANET_API IVANetServer {
public:
typedef std::pair<int,int> tPortRange;
typedef std::list<tPortRange> tPortList;
enum {
VA_NO_ERROR = 0,
VA_ALREADY_INITIALIZED,
VA_NOT_INITIALIZED,
VA_CONNECTION_FAILED,
};
// Factory method
static IVANetServer* Create();
virtual ~IVANetServer();
// TODO: Eventuell Event-Handler fr Netzwerk spter implementieren
//void AttachNetworkEventHandler(IVANetworkEventHandler* pNetworkEventHandler);
//void DetachNetworkEventHandler(IVANetworkEventHandler* pNetworkEventHandler);
/**
* Server initialisieren
*
* Parameter: sInterface Netzwerkschnittstelle auf welcher der Server arbeitet
* iServerPort Netzwerkport auf welcher der Server seinen Dienst anbietet
* iFreePortMin Begin Portbereich fr Kommunikation mit den Clients
* iFreePortMax Ende Portbereich fr Kommunikation mit den Clients
* iMaxNumClients Zahl der maximalen gleichzeitig verbundenen Netzwerk-Clients,
* wobei -1 fr unlimitiere Verbindungszahl steht
*
* Rckgabe: Statuscode
*/
// @todo: enforce setting real core in initialize call
virtual int Initialize(const std::string& sInterface,
int iServerPort=VANET_DEFAULT_PORT,
int iFreePortMin=10000,
int iFreePortMax=11000,
int iMaxNumClients = -1)=0;
/**
* Server initialisieren
*
* Parameter: sInterface Netzwerkschnittstelle auf welcher der Server arbeitet
* iServerPort Netzwerkport auf welcher der Server seinen Dienst anbietet
* liFreePorts Liste der Ports fr Kommunikation mit den Clients
* iMaxNumClients Zahl der maximalen gleichzeitig verbundenen Netzwerk-Clients,
* wobei -1 fr unlimitiere Verbindungszahl steht
*
* Rckgabe: Statuscode
*/
virtual int Initialize(const std::string& sInterface,
int iServerPort,
const tPortList& liFreePorts,
int iMaxNumClients = -1)=0;
// Vorhandene Serververbindungen trennen und Server beenden
// (Rckgabe: Statuscode)
virtual int Finalize()=0;
// Alle vorhandenen Verbindungen abbrechen und den Kern zurcksetzen
virtual void Reset()=0;
// Gibt die Netzwerk-Schnittstelle des Servers zurck
virtual std::string GetServerAdress() const=0;
// Gibt den Netzwerk-Port des Servers zurck
virtual int GetServerPort() const=0;
// Zugewiesene VACore-Instanz zurckgeben
virtual IVACore* GetCoreInstance() const=0;
// Zu steuernde VACore-Instanz zuweisen
// (NULL entfernt den Kern)
virtual void SetCoreInstance(IVACore* pCore)=0;
//// Gibt zurck, ob der Server aktiviert ist
//// und eingehende Befehle an den zugewiesenen Kern weiterleitet
//virtual bool IsActive() const=0;
//// Aktiviert/Deaktiviert den Server.
//// Nur wenn dieser aktiviert ist, leitet er
//// eingehende Befehle an den zugewiesenen Kern weiter
//virtual void SetActive(bool bActive)=0;
// Gibt zurck, ob ein Client verbunden ist
virtual bool IsClientConnected() const=0;
// Gibt zurck, ob ein Client verbunden ist
virtual int GetNumConnectedClients() const=0;
// Gibt den Namen/Host des Clients mit der entsprechenden ID
virtual std::string GetClientHostname( const int iClientIndex ) const=0;
class CEvent {
public:
enum {
EVENT_NOTHING = 0,
EVENT_CLIENT_CONNECT, // Verbindungsaufbau eines Clients
EVENT_CLIENT_DISCONNECT, // Gewollter Verbindungsabbruch eines Clients
EVENT_CLIENT_LOST // Ungewollter Verbindungsabbruch eines Clients
};
int iType; // Typ der Ereignisses
std::string sClient; //
CEvent() : iType(EVENT_NOTHING) {};
CEvent(int iInitType, const std::string& sInitParam)
: iType(iInitType), sClient(sInitParam) {};
};
class IEventHandler {
public:
virtual ~IEventHandler() {};
virtual void HandleEvent(const IVANetServer::CEvent& oEvent)=0;
};
virtual bool AttachEventHandler(IVANetServer::IEventHandler* pHandler)=0;
virtual bool DetachEventHandler(IVANetServer::IEventHandler* pHandler)=0;
protected:
IVANetServer();
};
#endif // __VANET_SERVER_H__
/*
*
* VVV VVV A
* VVV VVV AAA Virtual Acoustics
* VVV VVV AAA Real-time auralisation for virtual reality
* VVV VVV AAA
* VVVVVV AAA (c) Copyright Institut fr Technische Akustik (ITA)
* VVVV AAA RWTH Aachen (http://www.akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*
* Datei: VANetUtils.h
*
* Zweck: Hilfsfunktionen
*
* Autor(en): Frank Wefers (Frank.Wefers@akustik.rwth-aachen.de)
*
* ---------------------------------------------------------------------------------
*/
// $Id: VANetUtils.h 2732 2012-06-26 13:38:17Z fwefers $
#ifndef __VANET_UTILS_H__
#define __VANET_UTILS_H__
#include <VANetDefinitions.h>
#include <string>
// Einen Server-String in Addresse und Port zerlegen ("localhost:12340" => localhost, 12340)
// Lst eine CVAException aus falls das Parsen fehlschlgt. Falls kein Port angegeben wurde,
// ("localhost") bekommt iPort den Wert des default port zugewiesen.
VANET_API void SplitServerString(const std::string& sServerString,
std::string& sAddress,
int& iPort,
int iDefaultPort=VANET_DEFAULT_PORT);
#endif // __VANET_VERSION_H__