more server code

This commit is contained in:
Max-Wilhelm Bruker 2009-11-08 17:05:25 +01:00
parent 8b3723b871
commit dd5ae4d74d
9 changed files with 203 additions and 114 deletions

View file

@ -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;
}