From 01cb7c2a00b97773bb474dd5c03422c23eeaaa54 Mon Sep 17 00:00:00 2001
From: Anne Heimes <anne.heimes@rwth-aachen.de>
Date: Fri, 17 Feb 2017 17:22:12 +0100
Subject: [PATCH] sendet jetzt bis buffer voll und horcht erst dann - not
 running

---
 src/ITANetAudioStreamingServer.cpp | 113 +++++++++++++++--------------
 1 file changed, 58 insertions(+), 55 deletions(-)

diff --git a/src/ITANetAudioStreamingServer.cpp b/src/ITANetAudioStreamingServer.cpp
index 23fc16a..aadc195 100644
--- a/src/ITANetAudioStreamingServer.cpp
+++ b/src/ITANetAudioStreamingServer.cpp
@@ -6,7 +6,7 @@
 #include <ITADataSource.h>
 #include <ITANetAudioMessage.h>
 #include <ITAException.h>
-#include <ITAStreamInfo.h>
+#include <ITAStreamInfo.h>
 #include <ITAClock.h>
 
 // Vista includes
@@ -15,39 +15,39 @@
 #include <VistaInterProcComm/IPNet/VistaTCPSocket.h>
 #include <VistaBase/VistaTimeUtils.h>
 #include <VistaInterProcComm/IPNet/VistaIPAddress.h>
-#include <VistaBase/VistaStreamUtils.h>
+#include <VistaBase/VistaStreamUtils.h>
 #include <ITADataLog.h>
 
 // STL
 #include <cmath>
 #include <cassert>
 
-struct ITAServerLog : public ITALogDataBase
-{
-	inline static std::ostream& outputDesc( std::ostream& os )
-	{
-		os << "BlockId";
-		os << "\t" << "WorldTimeStamp";
-		os << "\t" << "ProtocolStatus";
-		os << "\t" << "FreeSamples";
-		os << std::endl;
-		return os;
-	};
-
-	inline std::ostream& outputData( std::ostream& os ) const
-	{
-		os << uiBlockId;
-		os << "\t" << std::setprecision( 12 ) << dWorldTimeStamp;
-		os << "\t" << iProtocolStatus;
-		os << "\t" << iFreeSamples;
-		os << std::endl;
-		return os;
-	};
-
-	unsigned int uiBlockId; //!< Block identifier (audio streaming)
-	double dWorldTimeStamp;
-	int iProtocolStatus; //!< ... usw
-	int iFreeSamples;
+struct ITAServerLog : public ITALogDataBase
+{
+	inline static std::ostream& outputDesc( std::ostream& os )
+	{
+		os << "BlockId";
+		os << "\t" << "WorldTimeStamp";
+		os << "\t" << "ProtocolStatus";
+		os << "\t" << "FreeSamples";
+		os << std::endl;
+		return os;
+	};
+
+	inline std::ostream& outputData( std::ostream& os ) const
+	{
+		os << uiBlockId;
+		os << "\t" << std::setprecision( 12 ) << dWorldTimeStamp;
+		os << "\t" << iProtocolStatus;
+		os << "\t" << iFreeSamples;
+		os << std::endl;
+		return os;
+	};
+
+	unsigned int uiBlockId; //!< Block identifier (audio streaming)
+	double dWorldTimeStamp;
+	int iProtocolStatus; //!< ... usw
+	int iFreeSamples;
 };
 
 class ITABufferedDataLoggerImplServer : public ITABufferedDataLogger < ITAServerLog > {};
@@ -57,7 +57,7 @@ CITANetAudioStreamingServer::CITANetAudioStreamingServer( )
 , m_iUpdateStrategy( AUTO )
 , m_pConnection( NULL )
 , m_pNetAudioServer( new CITANetAudioServer( ) )
-{
+{
 	iServerBlockId = 0;
 }
 
@@ -74,7 +74,7 @@ bool CITANetAudioStreamingServer::Start( const std::string& sAddress, int iPort
 	m_pMessage = new CITANetAudioMessage( m_pConnection->GetByteorderSwapFlag( ) );
 	m_pMessage->ResetMessage( );
 	m_pMessage->SetConnection( m_pConnection );
-	while ( !m_pMessage->ReadMessage( 0 ) ); //blocking
+	while ( !m_pMessage->ReadMessage( 0 ) ); //blocking
 
 	assert( m_pMessage->GetMessageType( ) == CITANetAudioProtocol::NP_CLIENT_OPEN );
 	CITANetAudioProtocol::StreamingParameters oClientParams = m_pMessage->ReadStreamingParameters( );
@@ -93,9 +93,9 @@ bool CITANetAudioStreamingServer::Start( const std::string& sAddress, int iPort
 		vstr::out() << "[ITANetAudioStreamingServer] Server and client parameters mismatch detected. Will notify client and stop." << std::endl;
 #endif
 	}
-
-	std::string paras = std::string( "NetAudioLogServer" ) + std::string( "_BS" ) + std::to_string( m_oServerParams.iBlockSize ) + std::string( "_Ch" ) + std::to_string( m_oServerParams.iChannels ) + std::string( ".txt" );
-	m_pServerLogger = new ITABufferedDataLoggerImplServer( );
+
+	std::string paras = std::string( "NetAudioLogServer" ) + std::string( "_BS" ) + std::to_string( m_oServerParams.iBlockSize ) + std::string( "_Ch" ) + std::to_string( m_oServerParams.iChannels ) + std::string( ".txt" );
+	m_pServerLogger = new ITABufferedDataLoggerImplServer( );
 	m_pServerLogger->setOutputFile( paras );
 
 	m_pMessage->SetMessageType( CITANetAudioProtocol::NP_SERVER_OPEN );
@@ -118,24 +118,27 @@ bool CITANetAudioStreamingServer::LoopBody( )
 	if ( m_iClientRingBufferFreeSamples >= int( m_pInputStream->GetBlocklength( ) ) )
 	{
 		// Send Samples
-		for ( int i = 0; i < int( m_pInputStream->GetNumberOfChannels( ) ); i++ )
+		while ( m_iClientRingBufferFreeSamples >= int( m_pInputStream->GetBlocklength( ) ) )
 		{
-			ITAStreamInfo oStreamInfo;
-			oStreamInfo.nSamples = m_sfTempTransmitBuffer.GetLength( );
-			const float* pfData = m_pInputStream->GetBlockPointer( i, &oStreamInfo );
-			if ( pfData != 0 )
-				m_sfTempTransmitBuffer[ i ].write( pfData, m_sfTempTransmitBuffer.GetLength( ) );
-		}
-		m_pInputStream->IncrementBlockPointer( );
-		iMsgType = CITANetAudioProtocol::NP_SERVER_SENDING_SAMPLES;
-		m_pMessage->SetMessageType( iMsgType );
-		m_pMessage->WriteSampleFrame( &m_sfTempTransmitBuffer );
-		m_pMessage->WriteMessage( ); 
-		m_iClientRingBufferFreeSamples -= m_sfTempTransmitBuffer.GetLength( );
+			for ( int i = 0; i < int( m_pInputStream->GetNumberOfChannels( ) ); i++ )
+			{
+				ITAStreamInfo oStreamInfo;
+				oStreamInfo.nSamples = m_sfTempTransmitBuffer.GetLength( );
+				const float* pfData = m_pInputStream->GetBlockPointer( i, &oStreamInfo );
+				if ( pfData != 0 )
+					m_sfTempTransmitBuffer[ i ].write( pfData, m_sfTempTransmitBuffer.GetLength( ) );
+			}
+			m_pInputStream->IncrementBlockPointer( );
+			iMsgType = CITANetAudioProtocol::NP_SERVER_SENDING_SAMPLES;
+			m_pMessage->SetMessageType( iMsgType );
+			m_pMessage->WriteSampleFrame( &m_sfTempTransmitBuffer );
+			m_pMessage->WriteMessage( );
+			m_iClientRingBufferFreeSamples -= m_sfTempTransmitBuffer.GetLength( );
 #ifdef NET_AUDIO_SHOW_TRAFFIC
 			vstr::out( ) << "[ITANetAudioStreamingServer] Transmitted " << m_sfTempTransmitBuffer.GetLength( ) << " samples for "
-			<< m_pInputStream->GetNumberOfChannels( ) << " channels" << std::endl;
+				<< m_pInputStream->GetNumberOfChannels( ) << " channels" << std::endl;
 #endif
+		}
 	}
 	else
 	{
@@ -148,9 +151,9 @@ bool CITANetAudioStreamingServer::LoopBody( )
 		vstr::out( ) << "[ITANetAudioStreamingServer] Not enough free samples in client buffer, requesting a trigger when more free samples available" << std::endl;
 #endif
 	}
-
-	oLog.iFreeSamples = m_iClientRingBufferFreeSamples;
-	oLog.iProtocolStatus = iMsgType;
+
+	oLog.iFreeSamples = m_iClientRingBufferFreeSamples;
+	oLog.iProtocolStatus = iMsgType;
 	oLog.dWorldTimeStamp = ITAClock::getDefaultClock( )->getTime( );
 	m_pServerLogger->log( oLog );
 
@@ -158,7 +161,7 @@ bool CITANetAudioStreamingServer::LoopBody( )
 	//m_pMessage->SetConnection( m_pConnection );
 	m_pMessage->ResetMessage( );
 
-	if ( m_pMessage->ReadMessage( 1 ) )
+	if ( m_pMessage->ReadMessage( 1 ) )
 	{
 		ITAServerLog oLog;
 		oLog.uiBlockId = ++iServerBlockId;
@@ -184,12 +187,12 @@ bool CITANetAudioStreamingServer::LoopBody( )
 				vstr::out( ) << "[ITANetAudioStreamingServer] Unkown protocol type : " << iMsgType << std::endl;
 				break;
 			}
-		}
-		oLog.iFreeSamples = m_iClientRingBufferFreeSamples;
-		oLog.iProtocolStatus = iMsgType;
+		}
+		oLog.iFreeSamples = m_iClientRingBufferFreeSamples;
+		oLog.iProtocolStatus = iMsgType;
 		oLog.dWorldTimeStamp = ITAClock::getDefaultClock( )->getTime( );
 		m_pServerLogger->log( oLog );
-	}
+	}
 
 
 	return false;
-- 
GitLab