diff options
Diffstat (limited to 'pacman-c++/server.cpp')
| -rw-r--r-- | pacman-c++/server.cpp | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/pacman-c++/server.cpp b/pacman-c++/server.cpp index bbe4ad6..422f7e0 100644 --- a/pacman-c++/server.cpp +++ b/pacman-c++/server.cpp | |||
| @@ -77,14 +77,21 @@ void Server::waitForClientConnections() | |||
| 77 | // server must stay alive as long as sockets (qt parent mem mechanism) | 77 | // server must stay alive as long as sockets (qt parent mem mechanism) |
| 78 | tcpSrv->listen(QHostAddress::Any, Constants::port); | 78 | tcpSrv->listen(QHostAddress::Any, Constants::port); |
| 79 | 79 | ||
| 80 | Color::Color playerColors[3] = { Color::red, Color::blue, Color::green }; | ||
| 80 | //for (unsigned int i=0; i<Color::max; ++i) { | 81 | //for (unsigned int i=0; i<Color::max; ++i) { |
| 81 | for (unsigned int i=0; i<1; ++i) { | 82 | for (unsigned int i=0; i<1; ++i) { |
| 82 | bool connectionAvailable = tcpSrv->waitForNewConnection(-1); | 83 | bool connectionAvailable = tcpSrv->waitForNewConnection(-1); |
| 83 | Q_ASSERT(connectionAvailable); | 84 | Q_ASSERT(connectionAvailable); |
| 84 | QTcpSocket *socket = tcpSrv->nextPendingConnection(); | 85 | QTcpSocket *socket = tcpSrv->nextPendingConnection(); |
| 85 | // TODO: color assignment | ||
| 86 | m_clientConnections[Color::red] = socket; | ||
| 87 | connect(socket, SIGNAL(readyRead()), this, SLOT(keyPressUpdate())); | 86 | connect(socket, SIGNAL(readyRead()), this, SLOT(keyPressUpdate())); |
| 87 | |||
| 88 | // assign color | ||
| 89 | Color::Color color = playerColors[i]; | ||
| 90 | m_clientConnections[color] = socket; | ||
| 91 | // notify player of color | ||
| 92 | ProtoBuf::WhoAmI packet; | ||
| 93 | packet.set_color(color); | ||
| 94 | Util::sendPacket(packet, socket); | ||
| 88 | } | 95 | } |
| 89 | } | 96 | } |
| 90 | 97 | ||
| @@ -93,16 +100,7 @@ void Server::sendUpdate(QSharedPointer< ProtoBuf::MapUpdate > packet) | |||
| 93 | std::string dataStr = packet->SerializeAsString(); | 100 | std::string dataStr = packet->SerializeAsString(); |
| 94 | const char *data = dataStr.c_str(); | 101 | const char *data = dataStr.c_str(); |
| 95 | foreach(QTcpSocket *socket, m_clientConnections) { | 102 | foreach(QTcpSocket *socket, m_clientConnections) { |
| 96 | //qDebug() << "sending str len: " << dataStr.length(); | 103 | Util::sendPacket(data, dataStr.length(), socket); |
| 97 | int bytesWritten = socket->write(data, dataStr.length()); | ||
| 98 | if (bytesWritten != dataStr.length()) { | ||
| 99 | qDebug() << "written: " << bytesWritten; | ||
| 100 | qDebug() << "strl: " << dataStr.length(); | ||
| 101 | } | ||
| 102 | Q_ASSERT(bytesWritten == dataStr.length()); | ||
| 103 | } | ||
| 104 | foreach(QTcpSocket *socket, m_clientConnections) { | ||
| 105 | socket->flush(); | ||
| 106 | } | 104 | } |
| 107 | } | 105 | } |
| 108 | 106 | ||
| @@ -117,12 +115,8 @@ void Server::keyPressUpdate() | |||
| 117 | qDebug() << "data?"; | 115 | qDebug() << "data?"; |
| 118 | if (socket->bytesAvailable() > 0) { | 116 | if (socket->bytesAvailable() > 0) { |
| 119 | qDebug() << "data!"; | 117 | qDebug() << "data!"; |
| 120 | QByteArray data = socket->readAll(); | ||
| 121 | // see mainwidget.cpp:153 | ||
| 122 | std::string dataStr; | 118 | std::string dataStr; |
| 123 | for (int i = 0; i < data.size(); ++i) { | 119 | Util::QByteArrayToStdString(socket->readAll(), dataStr); |
| 124 | dataStr += data[i]; | ||
| 125 | } | ||
| 126 | ProtoBuf::KeyPressUpdate packet; | 120 | ProtoBuf::KeyPressUpdate packet; |
| 127 | packet.ParseFromString(dataStr); | 121 | packet.ParseFromString(dataStr); |
| 128 | Transmission::field_t direction = packet.newkey(); | 122 | Transmission::field_t direction = packet.newkey(); |
| @@ -130,10 +124,8 @@ void Server::keyPressUpdate() | |||
| 130 | m_actorMovements[ color ] = Util::transmissionMovementToActor(direction); | 124 | m_actorMovements[ color ] = Util::transmissionMovementToActor(direction); |
| 131 | } | 125 | } |
| 132 | } | 126 | } |
| 133 | |||
| 134 | } | 127 | } |
| 135 | 128 | ||
| 136 | |||
| 137 | int main(int argc, char ** argv) | 129 | int main(int argc, char ** argv) |
| 138 | { | 130 | { |
| 139 | GOOGLE_PROTOBUF_VERIFY_VERSION; | 131 | GOOGLE_PROTOBUF_VERIFY_VERSION; |
