From da481762bded855ffd709114ee3a16ec4dbaaeb6 Mon Sep 17 00:00:00 2001 From: totycro Date: Sun, 10 Apr 2011 00:55:13 +0200 Subject: Tell player about their color minor cleanup --- pacman-c++/mainwidget.cpp | 50 +++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'pacman-c++/mainwidget.cpp') diff --git a/pacman-c++/mainwidget.cpp b/pacman-c++/mainwidget.cpp index 420ea8f..25f554a 100644 --- a/pacman-c++/mainwidget.cpp +++ b/pacman-c++/mainwidget.cpp @@ -15,16 +15,20 @@ MainWidget::MainWidget(QWidget *parent) //connect(AudioPlayer::self(), SIGNAL(finished()), this, SLOT(startGame())); //AudioPlayer::self()->play(AudioPlayer::Intro); - bool connected = connectToServer(); - if (!connected) { + Color::Color myColor = connectToServer(); + if (myColor == Color::none) { QMessageBox::critical(this, "Error", "Failed to connect to server, falling back to local test mode"); // TODO: quit application here or sth m_socket = NULL; QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(tick())); timer->start(Constants::tick); + } else { + connect(m_socket, SIGNAL(readyRead()), this, SLOT(tick())); } - connect(m_socket, SIGNAL(readyRead()), this, SLOT(tick())); + + // TODO: use mycolor + qDebug() << "myc" << myColor; startGame(); } @@ -146,17 +150,8 @@ void MainWidget::tick() } } } else { - QByteArray data = m_socket->readAll(); - //qDebug() << "read qbytes " << data.length(); - // TODO: normal conversion to std::string won't work, - // probably due to \0-bytes. both those methods will yield - // a 3 char long string - //std::string dataStr = std::string(data.constData()); - //std::string dataStr = QString(data).toStdString(); std::string dataStr; - for (int i = 0; i < data.size(); ++i) { - dataStr += data[i]; - } + Util::QByteArrayToStdString(m_socket->readAll(), dataStr); //qDebug() << "read str " << dataStr.length(); ProtoBuf::MapUpdate packet; @@ -181,7 +176,7 @@ void MainWidget::keyPressEvent(QKeyEvent* event) return; QWidget::keyPressEvent(event); - Transmission::field_t newKey = translateKey(event->key()); + Transmission::field_t newKey = translateKey(event->key(), -1); if (m_currentKey == newKey || newKey == -1) { return; } @@ -191,15 +186,7 @@ void MainWidget::keyPressEvent(QKeyEvent* event) // send to server ProtoBuf::KeyPressUpdate packet; packet.set_newkey(m_currentKey); - std::string dataStr = packet.SerializeAsString(); - unsigned int bytesWritten = m_socket->write(dataStr.c_str(), dataStr.length()); - m_socket->flush(); - if (bytesWritten != dataStr.length()) { - qDebug() << "written: " << bytesWritten; - qDebug() << "strl: " << dataStr.length(); - } - Q_ASSERT(bytesWritten == dataStr.length()); - + Util::sendPacket(packet, m_socket); qDebug() << "send key: " << m_currentKey; } else { @@ -244,10 +231,23 @@ void MainWidget::playerScoreClicked() return; } -bool MainWidget::connectToServer() +Color::Color MainWidget::connectToServer() { m_socket = new QTcpSocket(this); m_socket->connectToHost("127.0.0.1", Constants::port); - return m_socket->waitForConnected(Constants::connection_timeout); + bool worked = m_socket->waitForConnected(Constants::connection_timeout); + if (worked) { + // additional init + // first packet is our color + worked = m_socket->waitForReadyRead(); + if (worked) { + std::string data; + Util::QByteArrayToStdString(m_socket->readAll(), data); + ProtoBuf::WhoAmI packet; + packet.ParseFromString(data); + return static_cast(packet.color() & Transmission::color_mask); + } + } + return Color::none; } -- cgit v1.2.3