diff --git a/Controller.cpp b/Controller.cpp index ce86d42..d598d7d 100644 --- a/Controller.cpp +++ b/Controller.cpp @@ -47,7 +47,7 @@ bool CController::Start() usrp_rx_num = calcNumerator(g_Conf.GetGain(EGainType::usrprx)); usrp_tx_num = calcNumerator(g_Conf.GetGain(EGainType::usrptx)); - if (InitVocoders() || tcClient.Initialize(g_Conf.GetAddress(), g_Conf.GetTCMods(), g_Conf.GetPort())) + if (InitVocoders() || tcClient.Open(g_Conf.GetAddress(), g_Conf.GetTCMods(), g_Conf.GetPort())) { keep_running = false; return true; @@ -250,44 +250,48 @@ void CController::ReadReflectorThread() { while (keep_running) { - tcClient.ReConnect(); - std::queue> queue; // wait up to 100 ms to read something on the unix port if (tcClient.Receive(queue, 100)) { - while (! queue.empty()) + if (tcClient.ReConnect()) + { + std::cerr << "Unrecoverable ERROR! Quitting..." << std::endl; + exit(1); + } + } + + while (! queue.empty()) + { + // create a shared pointer to a new packet + // there is only one CTranscoderPacket created for each new STCPacket received from the reflector + auto packet = std::make_shared(*queue.front()); + queue.pop(); + switch (packet->GetCodecIn()) { - // create a shared pointer to a new packet - // there is only one CTranscoderPacket created for each new STCPacket received from the reflector - auto packet = std::make_shared(*queue.front()); - queue.pop(); - switch (packet->GetCodecIn()) - { - case ECodecType::dstar: - dstar_device->AddPacket(packet); - break; - case ECodecType::dmr: + case ECodecType::dstar: + dstar_device->AddPacket(packet); + break; + case ECodecType::dmr: #ifdef USE_SW_AMBE2 - swambe2_queue.push(packet); + swambe2_queue.push(packet); #else - dmrsf_device->AddPacket(packet); + dmrsf_device->AddPacket(packet); #endif - break; - case ECodecType::p25: - imbe_queue.push(packet); - break; - case ECodecType::usrp: - usrp_queue.push(packet); - break; - case ECodecType::c2_1600: - case ECodecType::c2_3200: - codec2_queue.push(packet); - break; - default: - Dump(packet, "ERROR: Received a reflector packet with unknown Codec:"); - break; - } + break; + case ECodecType::p25: + imbe_queue.push(packet); + break; + case ECodecType::usrp: + usrp_queue.push(packet); + break; + case ECodecType::c2_1600: + case ECodecType::c2_3200: + codec2_queue.push(packet); + break; + default: + Dump(packet, "ERROR: Received a reflector packet with unknown Codec:"); + break; } } } @@ -602,7 +606,14 @@ void CController::ProcessUSRPThread() void CController::SendToReflector(std::shared_ptr packet) { // send the packet over the socket - tcClient.Send(packet->GetTCPacket()); + while (tcClient.Send(packet->GetTCPacket())) + { + if (tcClient.ReConnect()) + { + std::cerr << "Unrecoverable ERROR, quiting!" << std::endl; + exit(1); + } + } packet->Sent(); }