2
2
* Hedgewars, a free turn based strategy game
3
* Copyright (c) 2006-2008 Ulyanov Igor <iulyanov@gmail.com>
4
* Copyright (c) 2010 Andrey Korotaev <unC0Rr@gmail.com>
3
* Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
4
* Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
6
6
* This program is free software; you can redistribute it and/or modify
7
7
* it under the terms of the GNU General Public License as published by
67
71
void HWNewNet::Connect(const QString & hostName, quint16 port, const QString & nick)
69
mynick = nick.isEmpty() ? QLineEdit::tr("unnamed") : nick;
74
while (mynick.isEmpty()) {
75
mynick = QInputDialog::getText(m_pGameCFGWidget,
76
QObject::tr("Nickname"),
77
QObject::tr("Please enter your nickname"),
79
QDir::home().dirName());
80
config->setValue("net/nick",mynick);
70
83
myhost = hostName + QString(":%1").arg(port);
71
84
NetSocket.connectToHost(hostName, port);
238
252
if (lst[0] == "CONNECTED") {
253
if(lst.size() < 3 || lst[2].toInt() < cMinServerVersion)
255
// TODO: Warn user, disconnect
256
qWarning() << "Server too old";
239
259
RawSendNet(QString("NICK%1%2").arg(delimeter).arg(mynick));
240
260
RawSendNet(QString("PROTO%1%2").arg(delimeter).arg(*cProtoVer));
241
261
netClientState = 1;
278
298
if (netClientState == 2)
279
emit chatStringLobby(HWProto::formatChatMsg(lst[1], lst[2]));
299
emit chatStringLobby(lst[1], HWProto::formatChatMsgForFrontend(lst[2]));
281
301
emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2]));
315
if (lst[0] == "READY") {
318
qWarning("Net: Malformed READY message");
321
for(int i = 1; i < lst.size(); ++i)
323
if (lst[i] == mynick)
324
emit setMyReadyStatus(true);
325
emit setReadyStatus(lst[i], true);
330
if (lst[0] == "NOT_READY") {
333
qWarning("Net: Malformed NOT_READY message");
336
for(int i = 1; i < lst.size(); ++i)
338
if (lst[i] == mynick)
339
emit setMyReadyStatus(false);
340
emit setReadyStatus(lst[i], false);
335
if (lst[0] == "CLIENT_FLAGS")
337
if(lst.size() < 3 || lst[1].size() < 2)
339
qWarning("Net: Malformed CLIENT_FLAGS message");
343
QString flags = lst[1];
344
bool setFlag = flags[0] == '+';
346
while(flags.size() > 1)
349
char c = flags[0].toAscii();
355
for(int i = 2; i < lst.size(); ++i)
357
if (lst[i] == mynick)
358
emit setMyReadyStatus(setFlag);
359
emit setReadyStatus(lst[i], setFlag);
396
419
emit configAsked();
398
emit nickAdded(lst[i], isChief && (lst[i] != mynick));
399
emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
421
if (lst[i] != mynick && isChief && config->Form->ui.pageRoomsList->chatWidget->ignoreList.contains(lst[i], Qt::CaseInsensitive) && !config->Form->ui.pageRoomsList->chatWidget->friendsList.contains(lst[i], Qt::CaseInsensitive))
427
emit nickAdded(lst[i], isChief && (lst[i] != mynick));
428
emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
472
502
int passLength = config->value("net/passwordlength", 0).toInt();
473
503
QString hash = config->value("net/passwordhash", "").toString();
474
QString password = QInputDialog::getText(0, tr("Password"), tr("Your nickname %1 is\nregistered on Hedgewars.org\nPlease provide your password below\nor pick another nickname in game config:").arg(mynick), QLineEdit::Password, passLength==0?NULL:QString(passLength,'\0'), &ok);
482
if (!passLength || password!=QString(passLength, '\0')) {
505
// If the password is blank, ask the user to enter one in
508
QString password = QInputDialog::getText(m_pGameCFGWidget, tr("Password"), tr("Your nickname %1 is\nregistered on Hedgewars.org\nPlease provide your password below\nor pick another nickname in game config:").arg(mynick), QLineEdit::Password, passLength==0?NULL:QString(passLength,'\0'), &ok);
483
516
hash = QCryptographicHash::hash(password.toLatin1(), QCryptographicHash::Md5).toHex();
484
517
config->setValue("net/passwordhash", hash);
485
518
config->setValue("net/passwordlength", password.size());
519
config->setNetPasswordLength(password.size());
488
522
RawSendNet(QString("PASSWORD%1%2").arg(delimeter).arg(hash));
526
if (lst[0] == "NOTICE") {
529
qWarning("Net: Bad NOTICE message");
534
int n = lst[1].toInt(&ok);
537
qWarning("Net: Bad NOTICE message");
492
546
if (lst[0] == "TEAM_ACCEPTED") {
493
547
if (lst.size() != 2)
560
614
qWarning("Net: Bad BYE message");
617
if (lst[1] == "Authentication failed")
619
// Set the password blank if case the user tries to join and enter his password again
620
config->setValue("net/passwordlength", 0);
621
config->setNetPasswordLength(0);
563
623
emit showMessage(HWNewNet::tr("Quit reason: ") + lst[1]);
676
void HWNewNet::gameFinished()
736
void HWNewNet::gameFinished(bool correctly)
678
738
if (netClientState == 5) netClientState = 3;
679
RawSendNet(QString("ROUNDFINISHED"));
739
RawSendNet(QString("ROUNDFINISHED%1%2").arg(delimeter).arg(correctly ? "1" : "0"));
682
742
void HWNewNet::banPlayer(const QString & nick)
707
767
RawSendNet(QString("START_GAME"));
770
void HWNewNet::updateRoomName(const QString & name)
772
RawSendNet(QString("ROOM_NAME%1%2").arg(delimeter).arg(name));
710
776
void HWNewNet::toggleRestrictJoins()
712
778
RawSendNet(QString("TOGGLE_RESTRICT_JOINS"));
753
819
RawSendNet(QString("GET_SERVER_VAR"));
822
void HWNewNet::handleNotice(int n)
829
QString newNick = QInputDialog::getText(0, tr("Nickname"), tr("Some one already uses\n your nickname %1\non the server.\nPlease pick another nickname:").arg(mynick), QLineEdit::Normal, mynick, &ok);
831
if (!ok || newNick.isEmpty()) {
837
config->setValue("net/nick", newNick);
838
config->updNetNick();
841
RawSendNet(QString("NICK%1%2").arg(delimeter).arg(newNick));