Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 000564ed

Přidáno uživatelem Oto Šťáva před téměř 4 roky(ů)

Re #8906 - Server - Add messages for incoming connections

Zobrazit rozdíly:

deltarobot/curvedataserver.cpp
146 146
    connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
147 147
    connect(clientSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onSocketStateChanged(QAbstractSocket::SocketState)));
148 148

  
149
    qDebug() << "Client" << clientSocket->peerAddress() << "is connecting...";
149 150
    sendPreamble(clientSocket);
150 151
    _sockets.push_back(Client(clientSocket));
151 152
}
......
265 266
void CurveDataServer::handleMessage(Client& client, uint16_t messageId, void *content, size_t contentSize) {
266 267
    switch (messageId) {
267 268
    case 0x3001:
268
        qDebug() << "Magic arrived!";
269 269
        handleProtocolMagic(client, (char *) content);
270 270
        break;
271 271
    case 0x2002:
272
        qDebug() << "Version arrived!";
273 272
        handleVersion(client, *((uint8_t*) content));
274 273
        break;
275 274
    case 0x3005:
......
289 288
    if (strncmp(content, correct, 8) == 0) {
290 289
        client.magic = true;
291 290
    }
291
    validateProtocol(client);
292 292
}
293 293

  
294 294
void CurveDataServer::handleVersion(Client& client, uint8_t content)
......
297 297
    {
298 298
        client.version = true;
299 299
    }
300
    validateProtocol(client);
300 301
}
301 302

  
302 303
void CurveDataServer::handlePong(Client& client, uint64_t* content)
......
325 326
}
326 327

  
327 328

  
329
void CurveDataServer::validateProtocol(Client &client) {
330
    if (!client.protocolValid && client.magic && client.version) {
331
        client.protocolValid = true;
332
        qDebug() << "Client" << client.socket->peerAddress() << "has successfully connected.";
333
    }
334
}
335

  
336

  
328 337
void CurveDataServer::terminateConnection(Client& client, std::string&& reason)
329 338
{
330 339
    if (client.socket->isOpen())
......
446 455
    QByteArray message = message64(0x3001, *((uint64_t*) messageContent));
447 456

  
448 457
    socket->write(message);
449

  
450
    qDebug() << "Sent Protocol Magic to" << socket->peerAddress();
451 458
}
452 459

  
453 460
void CurveDataServer::sendVersion(QTcpSocket *socket)
......
455 462
    QByteArray message = message32(0x2002, 1);
456 463

  
457 464
    socket->write(message);
458

  
459
    qDebug() << "Sent Protocol Version to" << socket->peerAddress();
460 465
}
461 466

  
462 467
void CurveDataServer::sendEot(QTcpSocket *socket, std::string&& reason)
......
469 474
{
470 475
    std::lock_guard<decltype (_socketsLock)> l(_socketsLock);
471 476
    for (auto& client : _sockets) {
472
        if (client.magic && client.version)
477
        if (client.protocolValid)
473 478
        {
474 479
            client.socket->write(message);
475 480
        }
......
481 486
    std::lock_guard<decltype (_socketsLock)> l(_socketsLock);
482 487
    for (auto& client : _sockets) {
483 488

  
484
        if (client.magic && client.version)
489
        if (client.protocolValid)
485 490
        {
486 491
            if (client.lastPong  < currentTimeMillis() - 10000)
487 492
            {

Také k dispozici: Unified diff