mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-04-27 07:48:01 -07:00
more server code
This commit is contained in:
parent
8b3723b871
commit
dd5ae4d74d
9 changed files with 203 additions and 114 deletions
|
|
@ -23,7 +23,7 @@
|
|||
#include "server_arrow.h"
|
||||
#include <QSqlQuery>
|
||||
|
||||
Server_Game::Server_Game(const QString &_creator, int _gameId, const QString &_description, const QString &_password, int _maxPlayers, bool _spectatorsAllowed, QObject *parent)
|
||||
Server_Game::Server_Game(Server_ProtocolHandler *_creator, int _gameId, const QString &_description, const QString &_password, int _maxPlayers, bool _spectatorsAllowed, QObject *parent)
|
||||
: QObject(parent), gameStarted(false), gameId(_gameId), description(_description), password(_password), maxPlayers(_maxPlayers), spectatorsAllowed(_spectatorsAllowed)
|
||||
{
|
||||
creator = addPlayer(_creator, false);
|
||||
|
|
@ -31,7 +31,7 @@ Server_Game::Server_Game(const QString &_creator, int _gameId, const QString &_d
|
|||
|
||||
Server_Game::~Server_Game()
|
||||
{
|
||||
broadcastEvent("game_closed", 0);
|
||||
sendGameEvent(new Event_GameClosed);
|
||||
|
||||
QMapIterator<int, Server_Player *> playerIterator(players);
|
||||
while (playerIterator.hasNext())
|
||||
|
|
@ -45,30 +45,6 @@ Server_Game::~Server_Game()
|
|||
qDebug("Server_Game destructor");
|
||||
}
|
||||
|
||||
QString Server_Game::getGameListLine() const
|
||||
{
|
||||
if (players.isEmpty())
|
||||
return QString("list_games|%1|||0|%2||0|0").arg(gameId).arg(maxPlayers);
|
||||
else {
|
||||
QString creatorName = creator ? creator->getPlayerName() : QString();
|
||||
return QString("list_games|%1|%2|%3|%4|%5|%6|%7|%8").arg(gameId)
|
||||
.arg(description)
|
||||
.arg(password.isEmpty() ? 0 : 1)
|
||||
.arg(players.size())
|
||||
.arg(maxPlayers)
|
||||
.arg(creatorName)
|
||||
.arg(spectatorsAllowed ? 1 : 0)
|
||||
.arg(spectators.size());
|
||||
}
|
||||
}
|
||||
|
||||
void Server_Game::broadcastEvent(const QString &eventStr, Server_Player *player)
|
||||
{
|
||||
QList<Server_Player *> allClients = QList<Server_Player *>() << players.values() << spectators;
|
||||
for (int i = 0; i < allClients.size(); ++i)
|
||||
allClients[i]->publicEvent(eventStr, player);
|
||||
}
|
||||
|
||||
void Server_Game::startGameIfReady()
|
||||
{
|
||||
if (players.size() < maxPlayers)
|
||||
|
|
@ -97,7 +73,7 @@ void Server_Game::startGameIfReady()
|
|||
}
|
||||
*/
|
||||
gameStarted = true;
|
||||
broadcastEvent("game_start", NULL);
|
||||
sendGameEvent(new Event_GameStart);
|
||||
setActivePlayer(0);
|
||||
}
|
||||
|
||||
|
|
@ -114,7 +90,7 @@ ProtocolResponse::ResponseCode Server_Game::checkJoin(const QString &_password,
|
|||
return ProtocolResponse::RespOk;
|
||||
}
|
||||
|
||||
Server_Player *Server_Game::addPlayer(const QString &playerName, bool spectator)
|
||||
Server_Player *Server_Game::addPlayer(Server_ProtocolHandler *handler, bool spectator)
|
||||
{
|
||||
int playerId;
|
||||
if (!spectator) {
|
||||
|
|
@ -129,8 +105,8 @@ Server_Player *Server_Game::addPlayer(const QString &playerName, bool spectator)
|
|||
} else
|
||||
playerId = -1;
|
||||
|
||||
Server_Player *newPlayer = new Server_Player(this, playerId, playerName, spectator);
|
||||
broadcastEvent(QString("join|%1").arg(spectator ? 1 : 0), newPlayer);
|
||||
Server_Player *newPlayer = new Server_Player(this, playerId, handler->getPlayerName(), spectator, handler);
|
||||
sendGameEvent(new Event_Join(-1, playerId, handler->getPlayerName(), spectator));
|
||||
|
||||
if (spectator)
|
||||
spectators << newPlayer;
|
||||
|
|
@ -148,7 +124,7 @@ void Server_Game::removePlayer(Server_Player *player)
|
|||
spectators.removeAt(spectators.indexOf(player));
|
||||
else
|
||||
players.remove(player->getPlayerId());
|
||||
broadcastEvent("leave", player);
|
||||
sendGameEvent(new Event_Leave(-1, player->getPlayerId()));
|
||||
delete player;
|
||||
|
||||
if (!players.size())
|
||||
|
|
@ -159,7 +135,7 @@ void Server_Game::removePlayer(Server_Player *player)
|
|||
void Server_Game::setActivePlayer(int _activePlayer)
|
||||
{
|
||||
activePlayer = _activePlayer;
|
||||
broadcastEvent(QString("set_active_player|%1").arg(_activePlayer), NULL);
|
||||
sendGameEvent(new Event_SetActivePlayer(-1, -1, activePlayer));
|
||||
setActivePhase(0);
|
||||
}
|
||||
|
||||
|
|
@ -171,11 +147,22 @@ void Server_Game::setActivePhase(int _activePhase)
|
|||
QList<Server_Arrow *> toDelete = player->getArrows().values();
|
||||
for (int i = 0; i < toDelete.size(); ++i) {
|
||||
Server_Arrow *a = toDelete[i];
|
||||
broadcastEvent(QString("delete_arrow|%1").arg(a->getId()), player);
|
||||
sendGameEvent(new Event_DeleteArrow(-1, player->getPlayerId(), a->getId()));
|
||||
player->deleteArrow(a->getId());
|
||||
}
|
||||
}
|
||||
|
||||
activePhase = _activePhase;
|
||||
broadcastEvent(QString("set_active_phase|%1").arg(_activePhase), NULL);
|
||||
sendGameEvent(new Event_SetActivePhase(-1, -1, activePhase));
|
||||
}
|
||||
|
||||
void Server_Game::sendGameEvent(GameEvent *event)
|
||||
{
|
||||
event->setGameId(gameId);
|
||||
QList<Server_Player *> receivers = QList<Server_Player *>() << players.values() << spectators;
|
||||
|
||||
for (int i = 0; i < receivers.size(); ++i)
|
||||
receivers[i]->sendProtocolItem(event, false);
|
||||
|
||||
delete event;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue