File indexing completed on 2024-04-21 04:02:07
0001 /*************************************************************************** 0002 * KBlocks, a falling blocks game by KDE * 0003 * SPDX-FileCopyrightText: 2010 Zhongjie Cai <squall.leonhart.cai@gmail.com> * 0004 * * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 ***************************************************************************/ 0007 #include "KBlocksNetClient.h" 0008 0009 KBlocksNetClient::KBlocksNetClient(const QString &remoteIP, quint16 localPort) 0010 { 0011 mLocalAddress = QHostAddress::Any; 0012 mLocalPort = localPort; 0013 0014 parseIPString(remoteIP, &mRemoteAddress, &mRemotePort); 0015 0016 mpClientSocket = new QUdpSocket(this); 0017 mpClientSocket->bind(mLocalAddress, mLocalPort); 0018 connect(mpClientSocket, &QUdpSocket::readyRead, this, &KBlocksNetClient::receivedData); 0019 } 0020 0021 KBlocksNetClient::~KBlocksNetClient() 0022 { 0023 delete mpClientSocket; 0024 } 0025 0026 int KBlocksNetClient::sendData(int count, char *data) 0027 { 0028 int ret = mpClientSocket->writeDatagram(data, count, mRemoteAddress, mRemotePort); 0029 if (ret < 0) { 0030 printf("Send error\n"); 0031 } 0032 return ret; 0033 } 0034 0035 int KBlocksNetClient::recvData(int count, char *data) 0036 { 0037 if (!mpClientSocket->hasPendingDatagrams()) { 0038 return -1; 0039 } 0040 return mpClientSocket->readDatagram(data, count); 0041 } 0042 0043 bool KBlocksNetClient::parseIPString(const QString &input, QHostAddress *ip, quint16 *port) 0044 { 0045 bool result = false; 0046 ip->setAddress(input.left(input.indexOf(QStringLiteral(":")))); 0047 *port = QStringView(input).mid(input.indexOf(QStringLiteral(":")) + 1).toUInt(&result); 0048 return result; 0049 } 0050 0051 void KBlocksNetClient::receivedData() 0052 { 0053 Q_EMIT(dataArrived(mpClientSocket->pendingDatagramSize())); 0054 } 0055 0056 #include "moc_KBlocksNetClient.cpp"