diff options
Diffstat (limited to 'pacman-c++/mainwidget.cpp')
| -rw-r--r-- | pacman-c++/mainwidget.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/pacman-c++/mainwidget.cpp b/pacman-c++/mainwidget.cpp index 5dc392c..d441607 100644 --- a/pacman-c++/mainwidget.cpp +++ b/pacman-c++/mainwidget.cpp | |||
| @@ -35,11 +35,14 @@ MainWidget::MainWidget(QWidget *parent) | |||
| 35 | 35 | ||
| 36 | /* call updateMap after m_color ist set! */ | 36 | /* call updateMap after m_color ist set! */ |
| 37 | createGui(); | 37 | createGui(); |
| 38 | m_scene->updateMap(Util::createDemoMap()); | 38 | Transmission::map_t map = Util::createDemoMap(); |
| 39 | m_scene->updateMap(map); | ||
| 40 | Util::deleteMap(map); | ||
| 41 | map = NULL; | ||
| 39 | 42 | ||
| 40 | connect(m_socket, SIGNAL(readyRead()), this, SLOT(tick())); | 43 | connect(m_socket, SIGNAL(readyRead()), this, SLOT(tick())); |
| 41 | 44 | ||
| 42 | QTimer *sendTimer = new QTimer(); | 45 | QTimer *sendTimer = new QTimer(this); |
| 43 | connect(sendTimer, SIGNAL(timeout()), this, SLOT(sendKeyUpdate())); | 46 | connect(sendTimer, SIGNAL(timeout()), this, SLOT(sendKeyUpdate())); |
| 44 | sendTimer->start(Constants::tick); | 47 | sendTimer->start(Constants::tick); |
| 45 | 48 | ||
| @@ -143,12 +146,12 @@ Transmission::field_t MainWidget::translateKey(int key) | |||
| 143 | 146 | ||
| 144 | void MainWidget::tick() | 147 | void MainWidget::tick() |
| 145 | { | 148 | { |
| 146 | std::string dataStr; | 149 | //TODO: allocate + reuse packet |
| 147 | Util::QByteArrayToStdString(m_socket->readAll(), dataStr); | 150 | QSharedPointer<QByteArray> data = Util::receivePacket(m_socket); |
| 148 | |||
| 149 | ProtoBuf::MapUpdate packet; | 151 | ProtoBuf::MapUpdate packet; |
| 150 | bool worked = packet.ParseFromString(dataStr); | 152 | bool worked = packet.ParseFromArray(data->data(), data->size()); |
| 151 | Q_ASSERT(worked); | 153 | Q_ASSERT(worked); |
| 154 | Q_UNUSED(worked); | ||
| 152 | Transmission::map_t map = Util::createUninitialisedMap(); | 155 | Transmission::map_t map = Util::createUninitialisedMap(); |
| 153 | Q_ASSERT(packet.field_size() == (int) (Constants::map_size.width * Constants::map_size.height)); | 156 | Q_ASSERT(packet.field_size() == (int) (Constants::map_size.width * Constants::map_size.height)); |
| 154 | int i = 0; | 157 | int i = 0; |
| @@ -161,7 +164,11 @@ void MainWidget::tick() | |||
| 161 | } | 164 | } |
| 162 | } | 165 | } |
| 163 | m_scene->updateMap(map); | 166 | m_scene->updateMap(map); |
| 167 | Util::deleteMap(map); | ||
| 164 | updateScore(packet); | 168 | updateScore(packet); |
| 169 | |||
| 170 | if (m_socket->bytesAvailable() > (qint64)sizeof(qint64)) | ||
| 171 | tick(); | ||
| 165 | } | 172 | } |
| 166 | 173 | ||
| 167 | void MainWidget::keyPressEvent(QKeyEvent* event) | 174 | void MainWidget::keyPressEvent(QKeyEvent* event) |
| @@ -226,28 +233,27 @@ void MainWidget::playerScoreClicked() | |||
| 226 | 233 | ||
| 227 | Color::Color MainWidget::connectToServer() | 234 | Color::Color MainWidget::connectToServer() |
| 228 | { | 235 | { |
| 229 | // check command line arguments for server port | 236 | /* TODO: check command line arguments for server port */ |
| 230 | const QStringList &args = QCoreApplication::arguments(); | 237 | const QStringList &args = QCoreApplication::arguments(); |
| 231 | QString srv = args.value(1, "127.0.0.1"); | 238 | QString srv = args.value(1, "127.0.0.1"); |
| 232 | qDebug() << "[Connect] server=" << srv; | 239 | qDebug() << "[Connect] server=" << srv; |
| 233 | 240 | ||
| 234 | // connect to server | 241 | /* connect to server */ |
| 235 | m_socket = new QTcpSocket(this); | 242 | m_socket = new QTcpSocket(this); |
| 236 | m_socket->connectToHost(srv, Constants::Networking::port); | 243 | m_socket->connectToHost(srv, Constants::Networking::port); |
| 237 | bool worked = m_socket->waitForConnected(Constants::Networking::connection_timeout); | 244 | bool worked = m_socket->waitForConnected(Constants::Networking::connection_timeout); |
| 238 | if (worked) | 245 | if (worked) |
| 239 | { | 246 | { |
| 240 | // additional init | 247 | /* additional init: first packet is our color */ |
| 241 | // first packet is our color | ||
| 242 | worked = m_socket->waitForReadyRead(); | 248 | worked = m_socket->waitForReadyRead(); |
| 243 | if (worked) | 249 | if (worked) |
| 244 | { | 250 | { |
| 245 | // receive color | 251 | /* receive color */ |
| 246 | std::string data; | 252 | QSharedPointer<QByteArray> data = Util::receivePacket(m_socket); |
| 247 | Util::QByteArrayToStdString(m_socket->readAll(), data); | ||
| 248 | ProtoBuf::WhoAmI packet; | 253 | ProtoBuf::WhoAmI packet; |
| 249 | bool worked = packet.ParseFromString(data); | 254 | bool worked = packet.ParseFromArray(data->data(), data->size()); |
| 250 | Q_ASSERT(worked); | 255 | Q_ASSERT(worked); |
| 256 | Q_UNUSED(worked); | ||
| 251 | return static_cast<Color::Color>(packet.color() & Transmission::color_mask); | 257 | return static_cast<Color::Color>(packet.color() & Transmission::color_mask); |
| 252 | } | 258 | } |
| 253 | } | 259 | } |
