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"