equal
deleted
inserted
replaced
35 |
35 |
36 HWNewNet::HWNewNet() : |
36 HWNewNet::HWNewNet() : |
37 isChief(false), |
37 isChief(false), |
38 m_game_connected(false), |
38 m_game_connected(false), |
39 loginStep(0), |
39 loginStep(0), |
40 netClientState(0) |
40 netClientState(Disconnected) |
41 { |
41 { |
42 // socket stuff |
42 // socket stuff |
43 connect(&NetSocket, SIGNAL(readyRead()), this, SLOT(ClientRead())); |
43 connect(&NetSocket, SIGNAL(readyRead()), this, SLOT(ClientRead())); |
44 connect(&NetSocket, SIGNAL(connected()), this, SLOT(OnConnect())); |
44 connect(&NetSocket, SIGNAL(connected()), this, SLOT(OnConnect())); |
45 connect(&NetSocket, SIGNAL(disconnected()), this, SLOT(OnDisconnect())); |
45 connect(&NetSocket, SIGNAL(disconnected()), this, SLOT(OnDisconnect())); |
50 HWNewNet::~HWNewNet() |
50 HWNewNet::~HWNewNet() |
51 { |
51 { |
52 if (m_game_connected) |
52 if (m_game_connected) |
53 { |
53 { |
54 RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit")); |
54 RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("User quit")); |
55 emit Disconnected(tr("User quit")); |
55 emit disconnected(tr("User quit")); |
56 } |
56 } |
57 NetSocket.flush(); |
57 NetSocket.flush(); |
58 } |
58 } |
59 |
59 |
60 void HWNewNet::Connect(const QString & hostName, quint16 port, const QString & nick) |
60 void HWNewNet::Connect(const QString & hostName, quint16 port, const QString & nick) |
61 { |
61 { |
|
62 netClientState = Connecting; |
62 mynick = nick; |
63 mynick = nick; |
63 myhost = hostName + QString(":%1").arg(port); |
64 myhost = hostName + QString(":%1").arg(port); |
64 NetSocket.connectToHost(hostName, port); |
65 NetSocket.connectToHost(hostName, port); |
65 } |
66 } |
66 |
67 |
73 NetSocket.disconnectFromHost(); |
74 NetSocket.disconnectFromHost(); |
74 } |
75 } |
75 |
76 |
76 void HWNewNet::CreateRoom(const QString & room) |
77 void HWNewNet::CreateRoom(const QString & room) |
77 { |
78 { |
78 if(netClientState != 2) |
79 if(netClientState != InLobby) |
79 { |
80 { |
80 qWarning("Illegal try to create room!"); |
81 qWarning("Illegal try to create room!"); |
81 return; |
82 return; |
82 } |
83 } |
83 |
84 |
87 isChief = true; |
88 isChief = true; |
88 } |
89 } |
89 |
90 |
90 void HWNewNet::JoinRoom(const QString & room) |
91 void HWNewNet::JoinRoom(const QString & room) |
91 { |
92 { |
92 if(netClientState != 2) |
93 if(netClientState != InLobby) |
93 { |
94 { |
94 qWarning("Illegal try to join room!"); |
95 qWarning("Illegal try to join room!"); |
95 return; |
96 return; |
96 } |
97 } |
97 |
98 |
170 } |
171 } |
171 } |
172 } |
172 |
173 |
173 void HWNewNet::OnConnect() |
174 void HWNewNet::OnConnect() |
174 { |
175 { |
|
176 netClientState = Connected; |
175 } |
177 } |
176 |
178 |
177 void HWNewNet::OnDisconnect() |
179 void HWNewNet::OnDisconnect() |
178 { |
180 { |
179 if(m_game_connected) emit Disconnected(""); |
181 netClientState = Disconnected; |
|
182 if(m_game_connected) emit disconnected(""); |
180 m_game_connected = false; |
183 m_game_connected = false; |
181 } |
184 } |
182 |
185 |
183 void HWNewNet::displayError(QAbstractSocket::SocketError socketError) |
186 void HWNewNet::displayError(QAbstractSocket::SocketError socketError) |
184 { |
187 { |
186 |
189 |
187 switch (socketError) { |
190 switch (socketError) { |
188 case QAbstractSocket::RemoteHostClosedError: |
191 case QAbstractSocket::RemoteHostClosedError: |
189 break; |
192 break; |
190 case QAbstractSocket::HostNotFoundError: |
193 case QAbstractSocket::HostNotFoundError: |
191 emit Disconnected(tr("The host was not found. Please check the host name and port settings.")); |
194 emit disconnected(tr("The host was not found. Please check the host name and port settings.")); |
192 break; |
195 break; |
193 case QAbstractSocket::ConnectionRefusedError: |
196 case QAbstractSocket::ConnectionRefusedError: |
194 emit Disconnected(tr("Connection refused")); |
197 emit disconnected(tr("Connection refused")); |
195 break; |
198 break; |
196 default: |
199 default: |
197 emit Disconnected(NetSocket.errorString()); |
200 emit disconnected(NetSocket.errorString()); |
198 } |
201 } |
199 } |
202 } |
200 |
203 |
201 void HWNewNet::SendPasswordHash(const QString & hash) |
204 void HWNewNet::SendPasswordHash(const QString & hash) |
202 { |
205 { |
245 qWarning() << "Server too old"; |
248 qWarning() << "Server too old"; |
246 } |
249 } |
247 |
250 |
248 RawSendNet(QString("NICK%1%2").arg(delimeter).arg(mynick)); |
251 RawSendNet(QString("NICK%1%2").arg(delimeter).arg(mynick)); |
249 RawSendNet(QString("PROTO%1%2").arg(delimeter).arg(*cProtoVer)); |
252 RawSendNet(QString("PROTO%1%2").arg(delimeter).arg(*cProtoVer)); |
250 netClientState = 1; |
253 netClientState = Connected; |
251 m_game_connected = true; |
254 m_game_connected = true; |
252 emit adminAccess(false); |
255 emit adminAccess(false); |
253 return; |
256 return; |
254 } |
257 } |
255 |
258 |
282 if(lst.size() < 3) |
285 if(lst.size() < 3) |
283 { |
286 { |
284 qWarning("Net: Empty CHAT message"); |
287 qWarning("Net: Empty CHAT message"); |
285 return; |
288 return; |
286 } |
289 } |
287 if (netClientState == 2) |
290 if (netClientState == InLobby) |
288 emit chatStringLobby(lst[1], HWProto::formatChatMsgForFrontend(lst[2])); |
291 emit chatStringLobby(lst[1], HWProto::formatChatMsgForFrontend(lst[2])); |
289 else |
292 else |
290 emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2])); |
293 emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2])); |
291 return; |
294 return; |
292 } |
295 } |
297 qWarning("Net: Malformed INFO message"); |
300 qWarning("Net: Malformed INFO message"); |
298 return; |
301 return; |
299 } |
302 } |
300 QStringList tmp = lst; |
303 QStringList tmp = lst; |
301 tmp.removeFirst(); |
304 tmp.removeFirst(); |
302 if (netClientState == 2) |
305 if (netClientState == InLobby) |
303 emit chatStringLobby(tmp.join("\n").prepend('\x01')); |
306 emit chatStringLobby(tmp.join("\n").prepend('\x01')); |
304 else |
307 else |
305 emit chatStringFromNet(tmp.join("\n").prepend('\x01')); |
308 emit chatStringFromNet(tmp.join("\n").prepend('\x01')); |
306 return; |
309 return; |
307 } |
310 } |
375 emit RemoveNetTeam(HWTeam(lst[1])); |
378 emit RemoveNetTeam(HWTeam(lst[1])); |
376 return; |
379 return; |
377 } |
380 } |
378 |
381 |
379 if(lst[0] == "ROOMABANDONED") { |
382 if(lst[0] == "ROOMABANDONED") { |
380 netClientState = 2; |
383 netClientState = InLobby; |
381 emit LeftRoom(tr("Room destroyed")); |
384 emit LeftRoom(tr("Room destroyed")); |
382 return; |
385 return; |
383 } |
386 } |
384 |
387 |
385 if(lst[0] == "KICKED") { |
388 if(lst[0] == "KICKED") { |
386 netClientState = 2; |
389 netClientState = InLobby; |
387 emit LeftRoom(tr("You got kicked")); |
390 emit LeftRoom(tr("You got kicked")); |
388 return; |
391 return; |
389 } |
392 } |
390 |
393 |
391 if(lst[0] == "JOINED") { |
394 if(lst[0] == "JOINED") { |
397 |
400 |
398 for(int i = 1; i < lst.size(); ++i) |
401 for(int i = 1; i < lst.size(); ++i) |
399 { |
402 { |
400 if (lst[i] == mynick) |
403 if (lst[i] == mynick) |
401 { |
404 { |
402 netClientState = 3; |
405 netClientState = InRoom; |
403 emit EnteredGame(); |
406 emit EnteredGame(); |
404 emit roomMaster(isChief); |
407 emit roomMaster(isChief); |
405 if (isChief) |
408 if (isChief) |
406 emit configAsked(); |
409 emit configAsked(); |
407 } |
410 } |
408 // TODO reactivate |
411 |
409 /* |
412 emit nickAdded(lst[i], isChief && (lst[i] != mynick)); |
410 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)) |
413 emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i])); |
411 { |
|
412 kickPlayer(lst[i]); |
|
413 } |
|
414 else |
|
415 */ |
|
416 { |
|
417 emit nickAdded(lst[i], isChief && (lst[i] != mynick)); |
|
418 emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i])); |
|
419 } |
|
420 } |
414 } |
421 return; |
415 return; |
422 } |
416 } |
423 |
417 |
424 if(lst[0] == "LOBBY:JOINED") { |
418 if(lst[0] == "LOBBY:JOINED") { |
430 |
424 |
431 for(int i = 1; i < lst.size(); ++i) |
425 for(int i = 1; i < lst.size(); ++i) |
432 { |
426 { |
433 if (lst[i] == mynick) |
427 if (lst[i] == mynick) |
434 { |
428 { |
435 netClientState = 2; |
429 netClientState = InLobby; |
436 RawSendNet(QString("LIST")); |
430 RawSendNet(QString("LIST")); |
437 emit Connected(); |
431 emit connected(); |
438 } |
432 } |
439 |
433 |
440 emit nickAddedLobby(lst[i], false); |
434 emit nickAddedLobby(lst[i], false); |
441 emit chatStringLobby(lst[i], tr("%1 *** %2 has joined").arg('\x03').arg("|nick|")); |
435 emit chatStringLobby(lst[i], tr("%1 *** %2 has joined").arg('\x03').arg("|nick|")); |
442 } |
436 } |
480 emit chatStringLobby(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2])); |
474 emit chatStringLobby(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2])); |
481 return; |
475 return; |
482 } |
476 } |
483 |
477 |
484 if (lst[0] == "RUN_GAME") { |
478 if (lst[0] == "RUN_GAME") { |
485 netClientState = 5; |
479 netClientState = InGame; |
486 emit AskForRunGame(); |
480 emit AskForRunGame(); |
487 return; |
481 return; |
488 } |
482 } |
489 |
483 |
490 if (lst[0] == "ASKPASSWORD") { |
484 if (lst[0] == "ASKPASSWORD") { |
587 { |
581 { |
588 emit AuthFailed(); |
582 emit AuthFailed(); |
589 } |
583 } |
590 m_game_connected = false; |
584 m_game_connected = false; |
591 Disconnect(); |
585 Disconnect(); |
592 emit Disconnected(lst[1]); |
586 emit disconnected(lst[1]); |
593 return; |
587 return; |
594 } |
588 } |
595 |
589 |
596 |
590 |
597 if (lst[0] == "ADMIN_ACCESS") { |
591 if (lst[0] == "ADMIN_ACCESS") { |
663 RawSendNet(QString("TEAMCHAT") + delimeter + str); |
657 RawSendNet(QString("TEAMCHAT") + delimeter + str); |
664 } |
658 } |
665 |
659 |
666 void HWNewNet::askRoomsList() |
660 void HWNewNet::askRoomsList() |
667 { |
661 { |
668 if(netClientState != 2) |
662 if(netClientState != InLobby) |
669 { |
663 { |
670 qWarning("Illegal try to get rooms list!"); |
664 qWarning("Illegal try to get rooms list!"); |
671 return; |
665 return; |
672 } |
666 } |
673 RawSendNet(QString("LIST")); |
667 RawSendNet(QString("LIST")); |
674 } |
668 } |
675 |
669 |
676 int HWNewNet::getClientState() |
670 HWNewNet::ClientState HWNewNet::clientState() |
677 { |
671 { |
678 return netClientState; |
672 return netClientState; |
679 } |
673 } |
680 |
674 |
681 QString HWNewNet::getNick() |
675 QString HWNewNet::getNick() |
698 return isChief; |
692 return isChief; |
699 } |
693 } |
700 |
694 |
701 void HWNewNet::gameFinished(bool correctly) |
695 void HWNewNet::gameFinished(bool correctly) |
702 { |
696 { |
703 if (netClientState == 5) netClientState = 3; |
697 if (netClientState == InGame) netClientState = InRoom; |
704 RawSendNet(QString("ROUNDFINISHED%1%2").arg(delimeter).arg(correctly ? "1" : "0")); |
698 RawSendNet(QString("ROUNDFINISHED%1%2").arg(delimeter).arg(correctly ? "1" : "0")); |
705 } |
699 } |
706 |
700 |
707 void HWNewNet::banPlayer(const QString & nick) |
701 void HWNewNet::banPlayer(const QString & nick) |
708 { |
702 { |
753 RawSendNet(QString("CLEAR_ACCOUNTS_CACHE")); |
747 RawSendNet(QString("CLEAR_ACCOUNTS_CACHE")); |
754 } |
748 } |
755 |
749 |
756 void HWNewNet::partRoom() |
750 void HWNewNet::partRoom() |
757 { |
751 { |
758 netClientState = 2; |
752 netClientState = InLobby; |
759 RawSendNet(QString("PART")); |
753 RawSendNet(QString("PART")); |
760 } |
754 } |
761 |
755 |
762 bool HWNewNet::isInRoom() |
756 bool HWNewNet::isInRoom() |
763 { |
757 { |
764 return netClientState > 2; |
758 return netClientState >= InRoom; |
765 } |
759 } |
766 |
760 |
767 void HWNewNet::setServerMessageNew(const QString & msg) |
761 void HWNewNet::setServerMessageNew(const QString & msg) |
768 { |
762 { |
769 RawSendNet(QString("SET_SERVER_VAR%1MOTD_NEW%1%2").arg(delimeter).arg(msg)); |
763 RawSendNet(QString("SET_SERVER_VAR%1MOTD_NEW%1%2").arg(delimeter).arg(msg)); |