--- linuxsampler/trunk/src/network/lscpserver.cpp 2007/12/03 18:30:47 1537 +++ linuxsampler/trunk/src/network/lscpserver.cpp 2008/01/25 15:06:02 1649 @@ -127,6 +127,7 @@ LSCPEvent::RegisterEvent(LSCPEvent::event_db_instr_info, "DB_INSTRUMENT_INFO"); LSCPEvent::RegisterEvent(LSCPEvent::event_db_instrs_job_info, "DB_INSTRUMENTS_JOB_INFO"); LSCPEvent::RegisterEvent(LSCPEvent::event_misc, "MISCELLANEOUS"); + LSCPEvent::RegisterEvent(LSCPEvent::event_total_stream_count, "TOTAL_STREAM_COUNT"); LSCPEvent::RegisterEvent(LSCPEvent::event_total_voice_count, "TOTAL_VOICE_COUNT"); LSCPEvent::RegisterEvent(LSCPEvent::event_global_info, "GLOBAL_INFO"); hSocket = -1; @@ -188,6 +189,10 @@ LSCPServer::SendLSCPNotify(LSCPEvent(LSCPEvent::event_total_voice_count, NewCount)); } +void LSCPServer::EventHandler::TotalStreamCountChanged(int NewCount) { + LSCPServer::SendLSCPNotify(LSCPEvent(LSCPEvent::event_total_stream_count, NewCount)); +} + #if HAVE_SQLITE3 void LSCPServer::DbInstrumentsEventHandler::DirectoryCountChanged(String Dir) { LSCPServer::SendLSCPNotify(LSCPEvent(LSCPEvent::event_db_instr_dir_count, InstrumentsDb::toEscapedPath(Dir))); @@ -284,6 +289,7 @@ pSampler->AddVoiceCountListener(&eventHandler); pSampler->AddStreamCountListener(&eventHandler); pSampler->AddBufferFillListener(&eventHandler); + pSampler->AddTotalStreamCountListener(&eventHandler); pSampler->AddTotalVoiceCountListener(&eventHandler); pSampler->AddFxSendCountListener(&eventHandler); MidiInstrumentMapper::AddMidiInstrumentCountListener(&eventHandler); @@ -303,6 +309,9 @@ timeval timeout; while (true) { + #if CONFIG_PTHREAD_TESTCANCEL + TestCancel(); + #endif // check if some engine channel's parameter / status changed, if so notify the respective LSCP event subscribers { std::set engineChannels = EngineChannelFactory::EngineChannelInstances(); @@ -440,6 +449,14 @@ NotifyMutex.Unlock(); } +void LSCPServer::LockRTNotify() { + RTNotifyMutex.Lock(); +} + +void LSCPServer::UnlockRTNotify() { + RTNotifyMutex.Unlock(); +} + int LSCPServer::EventSubscribers( std::list events ) { int subs = 0; SubscriptionMutex.Lock(); @@ -2347,6 +2364,16 @@ } /** + * Will be called by the parser to return the current number of all active streams. + */ +String LSCPServer::GetTotalStreamCount() { + dmsg(2,("LSCPServer: GetTotalStreamCount()\n")); + LSCPResultSet result; + result.Add(pSampler->GetDiskStreamCount()); + return result.Produce(); +} + +/** * Will be called by the parser to return the current number of all active voices. */ String LSCPServer::GetTotalVoiceCount() { @@ -2529,7 +2556,7 @@ if ( win32FileAttributeData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { throw Exception("Directory is specified"); } - #else + #else struct stat statBuf; int res = stat(Filename.c_str(), &statBuf); if (res) {