123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- #include "RtpServer.h"
- #include <QTcpSocket>
- RTPServer::RTPServer(QObject *parent)
- : QObject(parent), m_tcpServer(nullptr), m_port(8088)
- {
- m_logger = spdlog::get("RTPServer");
- if (!m_logger)
- {
- fmt::print("RTPServer: Failed to get logger instance.\n");
- return;
- }
- SPDLOG_LOGGER_INFO(m_logger, "RTPServer initialized on port {}", m_port);
- }
- RTPServer::~RTPServer()
- {
- if (m_tcpServer)
- {
- m_tcpServer->close();
- delete m_tcpServer;
- m_tcpServer = nullptr;
- }
- }
- /**
- * @brief 启动RTP服务
- * @param port 监听端口
- * @return 成功返回true,失败返回false
- */
- bool RTPServer::startServer(int port)
- {
- if(m_tcpServer == nullptr)
- {
- m_tcpServer = new QTcpServer(this);
- }
- m_port = port;
- if(!m_tcpServer->listen(QHostAddress::Any, m_port))
- {
- SPDLOG_LOGGER_ERROR(m_logger, "Failed to start RTP server on port {}", m_port);
- return false;
- }
- return true;
- }
- /* 处理新连接 */
- void RTPServer::do_newConnection()
- {
- QTcpSocket* clientSocket = m_tcpServer->nextPendingConnection();
- if (clientSocket == nullptr)
- {
- SPDLOG_LOGGER_ERROR(m_logger, "Failed to get pending connection.");
- return;
- }
- connect(clientSocket, &QTcpSocket::disconnected, this, &RTPServer::do_disconnect);
- connect(clientSocket, &QTcpSocket::readyRead, this, &RTPServer::do_receiveMessage);
- SPDLOG_LOGGER_INFO(m_logger, "新的客户端连接: {}", clientSocket->peerAddress().toString().toStdString());
- m_listClients.append(clientSocket); // 添加到客户端列表中
- }
- /* 断开连接 */
- void RTPServer::do_disconnect()
- {
- QTcpSocket* clientSocket = qobject_cast<QTcpSocket*>(sender());
- if (clientSocket)
- {
- SPDLOG_LOGGER_INFO(m_logger, "客户端断开连接: {}", clientSocket->peerAddress().toString().toStdString());
- clientSocket->deleteLater();
- m_listClients.removeAll(clientSocket);
- } else
- {
- SPDLOG_LOGGER_ERROR(m_logger, "Failed to cast sender to QTcpSocket.");
- }
- }
- /* 接收消息 */
- void RTPServer::do_receiveMessage()
- {
- QTcpSocket* clientSocket = qobject_cast<QTcpSocket*>(sender());
- if (clientSocket == nullptr)
- {
- SPDLOG_LOGGER_ERROR(m_logger, "Failed to cast sender to QTcpSocket.");
- return;
- }
- QByteArray data = clientSocket->readAll();
- if (data.isEmpty())
- {
- SPDLOG_LOGGER_WARN(m_logger, "Received empty data from client: {}", clientSocket->peerAddress().toString().toStdString());
- return;
- }
- /* 处理接收到的数据 */
- RtpSendClientInfo_t sendInfo;
- sendInfo.clientIP = clientSocket->peerAddress().toString();
- sendInfo.clientPort = clientSocket->peerPort();
- RtpRecvClientInfo_t* recvInfo = reinterpret_cast<RtpRecvClientInfo_t*>(data.data());
- switch(recvInfo->type)
- {
- case 0: // 登录请求
- handleLogin(sendInfo);
- break;
- case 1: // 心跳请求
- handleHeartbeat(sendInfo);
- break;
- case 2: // 注销请求
- handleLogout(sendInfo);
- break;
- default:
- SPDLOG_LOGGER_WARN(m_logger, "来自客户端为止的请求 {}:{}", sendInfo.clientIP.toStdString(), sendInfo.clientPort);
- break;
- }
- }
- /* 处理登录请求 */
- void RTPServer::handleLogin(RtpSendClientInfo_t& clientInfo)
- {
- }
- /* 处理心跳请求 */
- void RTPServer::handleHeartbeat(RtpSendClientInfo_t& clientInfo)
- {
- }
- /* 处理注销请求 */
- void RTPServer::handleLogout(RtpSendClientInfo_t& clientInfo)
- {
- }
- /* 获取发送UDP数据的指针 */
- bool RTPServer::getSendUdpSocketPtr(SoundCardRoadInfo_t roadID)
- {
-
- return true;
- }
|