From 264c3d0f6a117af52e5c0f1c162ec6392ec8651c Mon Sep 17 00:00:00 2001 From: Tom Early Date: Sun, 26 Jul 2020 08:55:33 -0700 Subject: [PATCH] CPacket::Duplicate is a pure virtual function & other minor changes --- src/cdvframepacket.h | 2 +- src/cdvlastframepacket.h | 2 +- src/cpacket.cpp | 9 -------- src/cpacket.h | 6 +++--- src/cpacketstream.cpp | 2 +- src/creflector.cpp | 45 ++++++++++++++-------------------------- src/creflector.h | 2 +- src/cysfprotocol.cpp | 2 +- 8 files changed, 23 insertions(+), 47 deletions(-) diff --git a/src/cdvframepacket.h b/src/cdvframepacket.h index ba1d11d..dbeb7df 100644 --- a/src/cdvframepacket.h +++ b/src/cdvframepacket.h @@ -66,7 +66,7 @@ public: // identity bool IsDvFrame(void) const { return true; } #ifndef NO_XLX - bool HaveTranscodableAmbe(void) const { return true; } + bool HasTranscodableAmbe(void) const { return true; } #endif // get diff --git a/src/cdvlastframepacket.h b/src/cdvlastframepacket.h index 1663d5e..ba068fb 100644 --- a/src/cdvlastframepacket.h +++ b/src/cdvlastframepacket.h @@ -53,7 +53,7 @@ public: // identity bool IsLastPacket(void) const { return true; } - bool HaveTranscodableAmbe(void) const { return false; } + bool HasTranscodableAmbe(void) const { return false; } }; diff --git a/src/cpacket.cpp b/src/cpacket.cpp index d82e2a8..9ba0ec6 100644 --- a/src/cpacket.cpp +++ b/src/cpacket.cpp @@ -103,15 +103,6 @@ CPacket::CPacket(uint16 sid, uint8 dstarpid, uint8 dmrpid, uint8 dmrsubpid, uint m_uiOriginId = ORIGIN_LOCAL; } -//////////////////////////////////////////////////////////////////////////////////////// -// virtual duplication - -CPacket *CPacket::Duplicate(void) const -{ - return new CPacket(*this); -} - - //////////////////////////////////////////////////////////////////////////////////////// // pid conversion diff --git a/src/cpacket.h b/src/cpacket.h index f74fe0a..a0781ec 100644 --- a/src/cpacket.h +++ b/src/cpacket.h @@ -46,16 +46,16 @@ public: CPacket(uint16 sid, uint8 dstarpid, uint8 dmrpid, uint8 dmrsubpid, uint8 ysfpid, uint8 ysfsubpid, uint8 ysfsubpidmax); // destructor - virtual ~CPacket() {}; + virtual ~CPacket() {} // virtual duplication - virtual CPacket *Duplicate(void) const; + virtual CPacket *Duplicate(void) const = 0; // identity virtual bool IsDvHeader(void) const { return false; } virtual bool IsDvFrame(void) const { return false; } virtual bool IsLastPacket(void) const { return false; } - virtual bool HaveTranscodableAmbe(void) const { return false; } + virtual bool HasTranscodableAmbe(void) const { return false; } // get virtual bool IsValid(void) const { return true; } diff --git a/src/cpacketstream.cpp b/src/cpacketstream.cpp index d65d35f..3e045e5 100644 --- a/src/cpacketstream.cpp +++ b/src/cpacketstream.cpp @@ -95,7 +95,7 @@ void CPacketStream::Push(CPacket *Packet) m_CodecStream->Lock(); { // transcoder ready & frame need transcoding ? - if ( m_CodecStream->IsConnected() && Packet->HaveTranscodableAmbe() ) + if ( m_CodecStream->IsConnected() && Packet->HasTranscodableAmbe() ) { // yes, push packet to trancoder queue // trancoder will push it after transcoding diff --git a/src/creflector.cpp b/src/creflector.cpp index e55c8e9..626a91b 100644 --- a/src/creflector.cpp +++ b/src/creflector.cpp @@ -114,7 +114,7 @@ bool CReflector::Start(void) // start one thread per reflector module for ( int i = 0; i < NB_OF_MODULES; i++ ) { - m_RouterFuture[i] = std::async(std::launch::async, &CReflector::RouterThread, this, &(m_Streams[i])); + m_RouterFuture[i] = std::async(std::launch::async, &CReflector::RouterThread, this, &(m_Stream[i])); } // start the reporting threads @@ -241,11 +241,9 @@ CPacketStream *CReflector::OpenStream(CDvHeaderPacket *DvHeader, std::shared_ptr void CReflector::CloseStream(CPacketStream *stream) { - // if ( stream != nullptr ) { - // wait queue is empty - // this waits forever + // wait queue is empty. this waits forever bool bEmpty = false; do { @@ -256,18 +254,12 @@ void CReflector::CloseStream(CPacketStream *stream) bEmpty = stream->empty(); stream->Unlock(); if ( !bEmpty ) - { - // wait a bit CTimePoint::TaskSleepFor(10); - } } while (!bEmpty); - // lock clients - GetClients(); - - // lock stream - stream->Lock(); + GetClients(); // lock clients + stream->Lock(); // lock stream // get and check the master std::shared_ptrclient = stream->GetOwnerClient(); @@ -277,7 +269,7 @@ void CReflector::CloseStream(CPacketStream *stream) client->NotAMaster(); // notify - g_Reflector.OnStreamClose(stream->GetUserCallsign()); + OnStreamClose(stream->GetUserCallsign()); std::cout << "Closing stream of module " << GetStreamModule(stream) << std::endl; } @@ -292,8 +284,6 @@ void CReflector::CloseStream(CPacketStream *stream) // and stop the queue stream->Close(); - - } } @@ -552,37 +542,32 @@ int CReflector::GetModuleIndex(char module) const CPacketStream *CReflector::GetStream(char module) { - CPacketStream *stream = nullptr; int i = GetModuleIndex(module); if ( i >= 0 ) { - stream = &(m_Streams[i]); + return &(m_Stream[i]); } - return stream; + return nullptr; } bool CReflector::IsStreamOpen(const CDvHeaderPacket *DvHeader) { - bool open = false; - for ( unsigned i = 0; (i < m_Streams.size()) && !open; i++ ) + for ( unsigned i = 0; i < m_Stream.size(); i++ ) { - open = ( (m_Streams[i].GetStreamId() == DvHeader->GetStreamId()) && - (m_Streams[i].IsOpen())); + if ( (m_Stream[i].GetStreamId() == DvHeader->GetStreamId()) && (m_Stream[i].IsOpen()) ) + return true; } - return open; + return false; } char CReflector::GetStreamModule(CPacketStream *stream) { - char module = ' '; - for ( unsigned i = 0; (i < m_Streams.size()) && (module == ' '); i++ ) + for ( unsigned i = 0; i < m_Stream.size(); i++ ) { - if ( &(m_Streams[i]) == stream ) - { - module = GetModuleLetter(i); - } + if ( &(m_Stream[i]) == stream ) + return GetModuleLetter(i); } - return module; + return ' '; } //////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/creflector.h b/src/creflector.h index c1ad3c3..8f46429 100644 --- a/src/creflector.h +++ b/src/creflector.h @@ -152,7 +152,7 @@ protected: CProtocols m_Protocols; // list of supported protocol handlers // queues - std::array m_Streams; + std::array m_Stream; // threads std::atomic keep_running; diff --git a/src/cysfprotocol.cpp b/src/cysfprotocol.cpp index 1d51b6e..e8e27bf 100644 --- a/src/cysfprotocol.cpp +++ b/src/cysfprotocol.cpp @@ -202,7 +202,7 @@ void CYsfProtocol::Task(void) } else if ( IsValidServerStatusPacket(Buffer) ) { - std::cout << "YSF server status enquiry from " << Ip << std::endl; + std::cout << "YSF server status enquiry from " << Ip << std::endl; // reply EncodeServerStatusPacket(&Buffer); Send(Buffer, Ip);