# HG changeset patch # User unc0rr # Date 1135379671 0 # Node ID 9311259d5242f1cae29ae6bfc343fd0d65b60a71 # Parent 59f7db859b8a4124c92eeafec6e534ce995bd299 More work on net game, still far from complete diff -r 59f7db859b8a -r 9311259d5242 QTfrontend/netclient.cpp --- a/QTfrontend/netclient.cpp Fri Dec 16 20:59:49 2005 +0000 +++ b/QTfrontend/netclient.cpp Fri Dec 23 23:14:31 2005 +0000 @@ -40,6 +40,9 @@ state = nsDisconnected; IRCmsg_cmd_param = new QRegExp("^[A-Z]+ :.+$"); IRCmsg_number_param = new QRegExp("^:\\S+ [0-9]{3} .+$"); + IRCmsg_who_cmd_param = new QRegExp("^:\\S+ [A-Z]+ \\S+"); + IRCmsg_who_cmd_param_text = new QRegExp("^:\\S+ [A-Z]+ \\S+ :.+$"); + isOp = false; connect(&NetSocket, SIGNAL(readyRead()), this, SLOT(ClientRead())); connect(&NetSocket, SIGNAL(connected()), this, SLOT(OnConnect())); @@ -76,10 +79,13 @@ } } -void HWNet::Connect(const QString & hostName, quint16 port) +void HWNet::Connect(const QString & hostName, quint16 port, const QString & nick) { state = nsConnecting; NetSocket.connectToHost(hostName, port); + mynick = nick; + opnick = ""; + opCount = 0; } @@ -87,7 +93,7 @@ { state = nsConnected; SendNet(QString("USER hwgame 1 2 Hedgewars game")); - SendNet(QString("NICK Hedgewars")); + SendNet(QString("NICK %1").arg(mynick)); } void HWNet::OnDisconnect() @@ -97,8 +103,8 @@ void HWNet::Perform() { - SendNet(QString("LIST")); - SendNet(QString("JOIN #hw")); +// SendNet(QString("LIST")); + SendNet(QString("JOIN #alex")); } void HWNet::Disconnect() @@ -137,6 +143,7 @@ void HWNet::ParseLine(const QString & msg) { + //QMessageBox::information(0, "", msg); if (IRCmsg_cmd_param->exactMatch(msg)) { msgcmd_paramHandler(msg); @@ -144,6 +151,14 @@ if (IRCmsg_number_param->exactMatch(msg)) { msgnumber_paramHandler(msg); + } else + if (IRCmsg_who_cmd_param->exactMatch(msg)) + { + msgwho_cmd_paramHandler(msg); + } else + if (IRCmsg_who_cmd_param_text->exactMatch(msg)) + { + msgwho_cmd_param_textHandler(msg); } } @@ -158,7 +173,9 @@ void HWNet::msgnumber_paramHandler(const QString & msg) { - QStringList list = msg.split(" "); + int pos = msg.indexOf(" :"); + QString text = msg.mid(pos + 2); + QStringList list = msg.mid(0, pos).split(" "); bool ok; quint16 number = list[1].toInt(&ok); if (!ok) @@ -171,9 +188,60 @@ emit Connected(); break; } - case 322 : + case 322 : // RPL_LIST { emit AddGame(list[3]); + break; + } + case 353 : // RPL_NAMREPLY + { + QStringList ops = text.split(" ").filter(QRegExp("^@\\S+$")); + opCount += ops.size(); + if (ops.size() == 1) + { + opnick = ops[0].mid(1); + } + break; + } + case 366 : // RPL_ENDOFNAMES + { + if (opCount != 1) + { + opnick = ""; + } + SendNet(QString("PRIVMSG #alex :%1 ops here").arg(opCount)); + opCount = 0; + break; + } + case 432 : // ERR_ERRONEUSNICKNAME + case 433 : // ERR_NICKNAMEINUSE + { + // ask for another nick } } } + +void HWNet::msgwho_cmd_paramHandler(const QString & msg) +{ + QStringList list = msg.split(" "); + QString who = list[0].mid(1).split("!")[0]; + if (list[1] == "NICK") + { + if (mynick == who) + mynick = list[2]; + if (opnick == who) + opnick = list[2]; + } +} + +void HWNet::msgwho_cmd_param_textHandler(const QString & msg) +{ + int pos = msg.indexOf(" :"); + QString text = msg.mid(pos + 2); + QStringList list = msg.mid(0, pos).split(" "); + QString who = list[0].mid(1).split("!")[0]; + if (list[1] == "PRIVMSG") + { + SendNet(QString("PRIVMSG #alex :%1 said \"%2\" to %3").arg(who, text, list[2])); + } +} diff -r 59f7db859b8a -r 9311259d5242 QTfrontend/netclient.h --- a/QTfrontend/netclient.h Fri Dec 16 20:59:49 2005 +0000 +++ b/QTfrontend/netclient.h Fri Dec 23 23:14:31 2005 +0000 @@ -44,7 +44,7 @@ public: HWNet(); - void Connect(const QString & hostName, quint16 port); + void Connect(const QString & hostName, quint16 port, const QString & nick); void Disconnect(); void SendNet(const QString & buf); void SendNet(const QByteArray & buf); @@ -65,10 +65,18 @@ NetState state; QRegExp * IRCmsg_cmd_param; QRegExp * IRCmsg_number_param; + QRegExp * IRCmsg_who_cmd_param; + QRegExp * IRCmsg_who_cmd_param_text; + QString mynick; + QString opnick; + bool isOp; + quint32 opCount; void ParseLine(const QString & msg); void msgcmd_paramHandler(const QString & msg); void msgnumber_paramHandler(const QString & msg); + void msgwho_cmd_paramHandler(const QString & msg); + void msgwho_cmd_param_textHandler(const QString & msg); private slots: void ClientRead();