123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- #include "Client.h"
- #include <QString>
- #include <stdio.h>
- #include <QTcpSocket>
- #include <QStringList>
- #include <QTime>
- #include "App.h"
- #include "Settings.h"
- Client::Client(App *app):
- QWClient(),
- myApp(app),
- mySocket(NULL),
- myEndFloodTimer(new QTime()),
- myConnectionRetries(0),
- myOnServerFlag(false)
- {
- *myEndFloodTimer = QTime::currentTime();
- }
- Client::~Client()
- {
- delete myEndFloodTimer;
- }
- void Client::setSocket(QTcpSocket *socket)
- {
- mySocket = socket;
- }
- void Client::say(const QString &msg)
- {
- QString cmd = "say " + msg;
- sendCmd(cmd.toAscii().data());
- }
- void Client::sayTeam(const QString &msg)
- {
- QString cmd = "say_team " + msg;
- sendCmd(cmd.toAscii().data());
- }
- void Client::setTeam(const QString &msg)
- {
- sendCmd(QString("setinfo \"team\" \"" + msg + "\"").toAscii().data());
- }
- void Client::disconnect()
- {
- QWClient::disconnect();
- myOnServerFlag = false;
- }
- void Client::print(const QString &msg)
- {
- QString str;
- str = QString(host()) + ":" + QString::number(port()) + "> " + msg;
- QByteArray b = str.toAscii();
- Client::stripColor(b.data());
- str = QString::fromAscii(b.data());
- printf("%s", str.toAscii().data());
- if(mySocket)
- {
- mySocket->write(str.toAscii());
- mySocket->waitForBytesWritten();
- }
- }
- void Client::onDisconnect()
- {
- print("Disconnected..\n");
- myOnServerFlag = false;
- }
- void Client::retryConnection()
- {
- if(myConnectionRetries == ConnectionRetries)
- {
- print("Giving up!\n");
- disconnect();
- myOnServerFlag = false;
- return;
- }
- print("Reconnecting...\n");
- reconnect();
- myConnectionRetries++;
- }
- void Client::parsePrintedLine()
- {
- QRegExp regex("^(.+):\\s+\\.([A-Za-z]+)\\s*(.*)$");
- if(regex.indexIn(myPrintLine) == -1)
- return;
- /* Flood prot */
- int timeLeft = QTime::currentTime().secsTo(*myEndFloodTimer);
- if(timeLeft > 0)
- {
- if(!myFloodMsgPrinted)
- {
- say("> Wait " + QString::number(timeLeft) + " second(s) before issuing a new command.");
- myFloodMsgPrinted = true;
- }
- return;
- }
- *myEndFloodTimer = QTime::currentTime().addSecs(Settings::globalInstance()->floodProtTime());
- QString nick = regex.capturedTexts().at(1);
- QString command = regex.capturedTexts().at(2);
- QString args = regex.capturedTexts().at(3);
- myFloodMsgPrinted = false;
- if(command == "help")
- {
- say("> commands:");
- say("> .qw <message>");
- say("> .spam <message>");
- say("> .help to show this help message.");
- return;
- }
- if(command == "qw" || command == "spam")
- {
- if(!args.trimmed().size())
- {
- say("> The format is ." + command + " <message>.");
- return;
- }
- say("> Broadcasting...");
- QString server(QString(host()) + ":" + QString::number(port()));
- QString message("-" + command + "- " + nick + " - " + server + " : " + args.trimmed());
- //-qw- Skillah - #crazy88 : 4on4 MIX qw.foppa.dk:27503 7/8
- myApp->broadcast(message);
- //myApp->requestBroadcast(command, nick, server, args.trimmed());
- nick = parseNameFun(nick); //for the irc message namefun must be removed.
- QString parsedMsg = parseNameFun(args.trimmed());
- myApp->requestBroadcast("dev", nick, server, parsedMsg);
- return;
- }
- }
- void Client::onPrint(int, const char *msg)
- {
- if(!strlen(msg))
- return;
- QString text(msg);
- if(text.endsWith('\n'))
- {
- myPrintLine.append(text);
- parsePrintedLine();
- print(myPrintLine);
- myPrintLine.clear();
- }
- else
- {
- myPrintLine.append(text);
- }
- }
- bool Client::isOnServer() const
- {
- return myOnServerFlag;
- }
- void Client::onError(const char *description)
- {
- QString desc(description);
- if(desc == "Client Timed Out.")
- {
- print("Error (" + QString(description) + ")\n");
- }
- else
- {
- print("Error (" + QString(description) + ")\n");
- }
- myOnServerFlag = false;
- }
- void Client::onLevelChanged(int, const char *levelName, float, float, float, float, float, float, float, float, float, float)
- {
- print(QString(levelName) + "\n");
- myDownloadProgressPrintedFlag = false;
- }
- void Client::onChallenge()
- {
- print("challenge\n");
- }
- void Client::onConnection()
- {
- print("connection\n");
- }
- void Client::onConnected()
- {
- print("connected\n");
- }
- void Client::onDownloadStarted(const char *fileName)
- {
- print("Download started " + QString(fileName) + "\n");
- }
- void Client::onOOBPrint(const char *msg)
- {
- print(QString(msg));
- }
- void Client::onStuffedCmd(const char *cmd)
- {
- QString strCmd(cmd);
- if(strCmd == "skins") //connection sequence complete
- {
- myConnectionRetries = 0;
- myOnServerFlag = true;
- }
- }
- void Client::onDownloadProgress(int percent)
- {
- if(!(percent % 10))
- {
- if(!myDownloadProgressPrintedFlag)
- {
- print("Download " + QString::number(percent) + "%\n");
- myDownloadProgressPrintedFlag = true;
- }
- }
- else
- {
- myDownloadProgressPrintedFlag = false;
- }
- }
- void Client::onDownloadFinished()
- {
- print("Download 100% finished.\n");
- }
- QString Client::parseNameFun(const QString &string)
- {
- QByteArray b(string.toAscii());
- QWClient::stripColor(b.data());
- return QString(b);
- }
|