# HG changeset patch # User unc0rr # Date 1136036809 0 # Node ID a803a00a3272d994585c6b7e1619292c98790326 # Parent 9367f246fb5f8dbb731908f8947462db51abe05b - Anti-flood and anti-lag changes - Fixed crash on connect to net server diff -r 9367f246fb5f -r a803a00a3272 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Sat Dec 31 13:45:09 2005 +0000 +++ b/QTfrontend/game.cpp Sat Dec 31 13:46:49 2005 +0000 @@ -142,6 +142,11 @@ } case '+': { + if (gameType == gtNet) + { + QByteArray tmpbuf = QByteArray::fromRawData((char *)&msgsize, 1) + QByteArray::fromRawData(msgbuf, msgsize); + emit SendNet(tmpbuf); + } break; } default: diff -r 9367f246fb5f -r a803a00a3272 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Sat Dec 31 13:45:09 2005 +0000 +++ b/QTfrontend/hwform.cpp Sat Dec 31 13:46:49 2005 +0000 @@ -306,11 +306,11 @@ void HWForm::NetConnect() { hwnet = new HWNet(ui.CBResolution->currentIndex(), ui.CBFullscreen->isChecked()); - hwnet->Connect("172.19.5.168", 6667, ui.editNetNick->text()); connect(hwnet, SIGNAL(Connected()), this, SLOT(GoToNetChat())); connect(hwnet, SIGNAL(AddGame(const QString &)), this, SLOT(AddGame(const QString &))); connect(hwnet, SIGNAL(EnteredGame()), this, SLOT(NetGameEnter())); connect(hwnet, SIGNAL(ChangeInTeams(const QStringList &)), this, SLOT(ChangeInNetTeams(const QStringList &))); + hwnet->Connect("172.19.5.168", 6667, ui.editNetNick->text()); } void HWForm::NetDisconnect() diff -r 9367f246fb5f -r a803a00a3272 QTfrontend/netclient.cpp --- a/QTfrontend/netclient.cpp Sat Dec 31 13:45:09 2005 +0000 +++ b/QTfrontend/netclient.cpp Sat Dec 31 13:46:49 2005 +0000 @@ -165,11 +165,26 @@ // its ping ("?") } else { - RawSendNet(QString("PRIVMSG %1 :"MAGIC_CHAR MAGIC_CHAR"%2").arg(channel, msg)); + if (state == nsGaming) + { + NetBuffer += buf; + } else + { + RawSendNet(QString("PRIVMSG %1 :"MAGIC_CHAR MAGIC_CHAR"%2").arg(channel, msg)); + } } } } +void HWNet::FlushNetBuf() +{ + if (NetBuffer.size() > 0) + { + RawSendNet(QString("PRIVMSG %1 :"MAGIC_CHAR MAGIC_CHAR"%2").arg(channel, QString(NetBuffer.toBase64()))); + NetBuffer.clear(); + } +} + void HWNet::ParseLine(const QString & msg) { //QMessageBox::information(0, "", msg); @@ -344,14 +359,27 @@ msg = MAGIC_CHAR "T" MAGIC_CHAR + teams[i].nick + MAGIC_CHAR + teams[i].hhs.join(MAGIC_CHAR); RawSendNet(QString("PRIVMSG %1 :%2").arg(channel, msg)); hwp_chanmsg(mynick, msg); - SENDCFGSTRNET(QString("ecolor %1").arg(color)); - SENDCFGSTRNET("eadd hh0 0"); - SENDCFGSTRNET("eadd hh1 0"); - SENDCFGSTRNET("eadd hh2 0"); + QByteArray cache; + #define ADD(a) { \ + QByteArray strmsg; \ + strmsg.append(a); \ + quint8 sz = strmsg.size(); \ + cache.append(QByteArray((char *)&sz, 1)); \ + cache.append(strmsg); \ + } + ADD(QString("ecolor %1").arg(color)); + ADD("eadd hh0 0"); + ADD("eadd hh1 0"); + ADD("eadd hh2 0"); + ADD("eadd hh3 0"); + ADD("eadd hh4 0"); + #undef ADD + QString _msg = MAGIC_CHAR MAGIC_CHAR + QString(cache.toBase64()); + hwp_chanmsg(mynick, _msg); + RawSendNet(QString("PRIVMSG %1 :").arg(channel) + _msg); color <<= 8; } SENDCFGSTRNET("!"); - state = nsGaming; } } @@ -384,13 +412,16 @@ if (msg == MAGIC_CHAR MAGIC_CHAR "ASE=") { state = nsGaming; + TimerFlusher = new QTimer(); + connect(TimerFlusher, SIGNAL(timeout()), this, SLOT(FlushNetBuf())); + TimerFlusher->start(2000); } if (msg.startsWith(MAGIC_CHAR"T"MAGIC_CHAR)) { NetTeamAdded(msg.mid(3)); } } - if ((state != nsGaming) && (state != nsStarting)) + if ((state < nsStarting) || (state > nsGaming)) { return; } diff -r 9367f246fb5f -r a803a00a3272 QTfrontend/netclient.h --- a/QTfrontend/netclient.h Sat Dec 31 13:45:09 2005 +0000 +++ b/QTfrontend/netclient.h Sat Dec 31 13:46:49 2005 +0000 @@ -38,6 +38,7 @@ #include #include #include +#include #include "team.h" #include "rndstr.h" @@ -103,6 +104,8 @@ RNDStr seedgen; int playerscnt; int configasks; + QByteArray NetBuffer; + QTimer * TimerFlusher; void RawSendNet(const QString & buf); void RawSendNet(const QByteArray & buf); @@ -128,6 +131,7 @@ void OnDisconnect(); void Perform(); void displayError(QAbstractSocket::SocketError socketError); + void FlushNetBuf(); }; #define SENDCFGSTRNET(a) {\ @@ -135,8 +139,9 @@ strmsg.append(a); \ quint8 sz = strmsg.size(); \ QByteArray enginemsg = QByteArray((char *)&sz, 1) + strmsg; \ - emit FromNet(enginemsg); \ - RawSendNet(QString("PRIVMSG %1 :"MAGIC_CHAR MAGIC_CHAR"%2").arg(channel, QString(enginemsg.toBase64()))); \ + QString _msg = MAGIC_CHAR MAGIC_CHAR + QString(enginemsg.toBase64()); \ + hwp_chanmsg(mynick, _msg); \ + RawSendNet(QString("PRIVMSG %1 :").arg(channel) + _msg); \ } #define SENDCFGSTRLOC(a) {\