bool SeedUDPClientHandler::handleSetValueCommand() { int id = mReadDatagram.readNextInt(); QString valueToSet = mReadDatagram.readNextString(); mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_SET_VALUE_ACK); mWriteDatagram.writeInt(id); QList<Value*> knownValues = mKnownValues.keys(); for(int i = 0; i < knownValues.size(); ++i) { Value *value = knownValues.at(i); if(mKnownValues.value(value) == id) { bool ok = value->setValueFromString(valueToSet); if(ok) { mWriteDatagram.writeByte(1); } else { mWriteDatagram.writeByte(0); } sendDatagram(); return true; } } mWriteDatagram.writeByte(2); //notify: failed to find value sendDatagram(); return true; }
bool TCore::dock() { enum ControlSymbols { ADD_ITEM = 0, SET_TITLE, }; const qint8 id = 8; moveWidget(id, DOCK, 700, 20, 300, 300); QByteArray datagram, data(9,0); qint8 oper1 = id; memcpy(data.data(), &oper1, 1); oper1 = DOCK; memcpy(data.data()+1, &oper1, 1); oper1 = VALUE; memcpy(data.data()+2, &oper1, 1); oper1 = SET_TITLE; memcpy(data.data()+3, &oper1, 1); memcpy(data.data()+4, "title", 5); sendDatagram(address, remoutePort, data); data.resize(7); oper1 = ADD_ITEM; memcpy(data.data()+3, &oper1, 1); oper1 = 1; memcpy(data.data()+4, &oper1, 1); oper1 = 6; memcpy(data.data()+5, &oper1, 1); oper1 = 3; memcpy(data.data()+6, &oper1, 1); sendDatagram(address, remoutePort, data); return true; }
bool TCore::labelI_and_hide() { const qint8 id = 2; static qint32 value = 0; value++; moveWidget(id, LABELI, 10, 300, 100, 30); QByteArray datagram, data(14,0); qint8 oper1 = id; memcpy(data.data(), &oper1, 1); oper1 = MainWindow::LABELI; memcpy(data.data()+1, &oper1, 1); oper1 = MainWindow::VALUE; memcpy(data.data()+2, &oper1, 1); memcpy(data.data()+3, &value, 4); sendDatagram(address, remoutePort, data); if(value % 4) { QByteArray datagram, data(7,0); //show/hide oper1 = id; memcpy(data.data(), &oper1, 1); oper1 = LABELI; memcpy(data.data()+1, &oper1, 1); oper1 = SHOW; memcpy(data.data()+2, &oper1, 1); oper1 = 2;//hide memcpy(data.data()+3, &oper1, 4); sendDatagram(address, remoutePort, data); } return true; }
bool TCore::led() { enum ControlSymbols { NAME = 0x00, STATE,//0x01 }; enum States { OFF = 0x00, OK,//0x01 WARNING,//0x02 ALARM,//0x03 }; const qint8 id = 6; static qint8 value = 0; moveWidget(id, LED, 600, 100, 100, 30); QByteArray datagram, data(17,0); qint8 oper1 = id; memcpy(data.data(), &oper1, 1); oper1 = LED; memcpy(data.data()+1, &oper1, 1); oper1 = VALUE; memcpy(data.data()+2, &oper1, 1); oper1 = NAME; memcpy(data.data()+3, &oper1, 1); memcpy(data.data()+4, "state of word", 13); sendDatagram(address, remoutePort, data); data.resize(5); oper1 = STATE; memcpy(data.data()+3, &oper1, 1); memcpy(data.data()+4, &value, 1); sendDatagram(address, remoutePort, data); if(++value > 0x03)value = 0; return true; }
int Worker::inquiry() { Datagram dg; inquiry_result_t * btDev; unsigned char btDevNum; // wait for inquiry (about 20 seconds) // FLEX: returns Bluetooth devices sendDatagram(serial, REQUEST, INQUIRY); receiveDatagram(serial, &dg); if (!(dg.type == RESPONSE && dg.id == INQUIRY)) return -1; btDevNum = parseInquiryDatagram(&btDev, &dg); emit bluetoothInquiryCompleted(btDev, btDevNum); sync->acquire(); if (btDeviceIndexChosen == -1) return -1; sendDatagram(serial, RESPONSE, OK); return 0; }
//Memory Access Configuration Protocol uint16_t DCC_Proxy::MACProcessRead(void) { uint32_t address = getAddress(_rxDatagramBuffer->data); uint8_t space = decodeSpace(_rxDatagramBuffer->data); uint8_t datagram_offset = (_rxDatagramBuffer->data[1]&0x03)?6:7; //if the space is encoded in the flags in data[1], then the payload begins at byte 6; else, the payload begins after the space byte,at byte 7. uint8_t length = _rxDatagramBuffer->data[datagram_offset]; OLCB_Datagram reply; memcpy(&(reply.destination), &(_rxDatagramBuffer->source), sizeof(OLCB_NodeID)); //copy first six/seven bytes. memcpy(reply.data, _rxDatagramBuffer->data, datagram_offset); reply.data[1] = MAC_CMD_READ_REPLY | reply.data[1]&0x0F; //set as read response Serial.println("MACPROCESSREAED"); Serial.print("Making reply with MTI "); Serial.println(reply.data[0], HEX); Serial.println(reply.data[1], HEX); //TODO presume datagram? Serial.print("length = "); Serial.println(length, DEC); Serial.print("address = "); Serial.println(address, HEX); Serial.print("space = "); Serial.println(space, HEX); Serial.print("data offset in datagram = "); Serial.println(datagram_offset); //And, now do something useful. //first check the space? switch(space) { case 0xFD: //Configuration space...basically just EEPROM reply.length = length+datagram_offset; for(uint8_t i = 0; i < length; ++i) { reply.data[datagram_offset+i] = eeprom_read_byte((uint8_t*)(address+i+_eeprom_address)); //TODO check that address is < 255! } if(sendDatagram(&reply)) return DATAGRAM_ERROR_OK; //else //have them resend return DATAGRAM_REJECTED_BUFFER_FULL; case 0xFF: //CDI request. Serial.println("CDI request."); reply.length = readCDI(address, length, &(reply.data[datagram_offset])) + 6; Serial.print("total length of CDI reply = "); Serial.println(reply.length, DEC); if(sendDatagram(&reply)) return DATAGRAM_ERROR_OK; //else //have them resend return DATAGRAM_REJECTED_BUFFER_FULL; //case 0xFE: //"All memory" access. Just give them what they want? //Serial.println("all memory request. ignoring"); // break; } //Serial.println("NAKing"); return DATAGRAM_REJECTED; //send a NAK. Is this what we really want? }
void UDPServer::start() { sleep(UDPSleep); while(UDPLoopGuard) { VideoFile videofileToSend = getFromQueue(); std::ifstream videoFile; videoFile.open(videofileToSend.getLocalPath()); bool isBegin = true; uint datagramNumber = 1; while(!videoFile.eof()) { int maxDataSize = MAX_DATAGRAM_SIZE - DATAGRAM_CUSTOM_HEADER_SIZE; char bytesFromFile[maxDataSize]; memset(bytesFromFile, 0, maxDataSize); videoFile.read(bytesFromFile, maxDataSize); std::string bytesStr(bytesFromFile, videoFile.gcount()); if (isBegin) { sendDatagram(datagramNumber, videofileToSend.getId(), UdpMessagesTypes::Begin, bytesStr,videofileToSend.getTimestamp()); } else { sendDatagram(datagramNumber, videofileToSend.getId(), UdpMessagesTypes::Middle, bytesStr,videofileToSend.getTimestamp()); } isBegin = false; datagramNumber++; } sendDatagram(datagramNumber, videofileToSend.getId(), UdpMessagesTypes::End, "", videofileToSend.getTimestamp()); videoFile.close(); } }
bool SeedUDPClientHandler::handleAgentOverviewCommand() { if(mOwner == 0) { return false; } QList<SimObjectGroup*> agentGroups = Physics::getPhysicsManager()->getSimObjectGroups(); { for(int i = 0; i < agentGroups.size(); ++i) { SimObjectGroup *group = agentGroups.at(i); if(!mKnownObjectGroups.values().contains(group)) { mKnownObjectGroups.insert(mObjectGroupCounter++, group); } } } QList<int> knownGroupIds = mKnownObjectGroups.keys(); { for(int i = 0; i < knownGroupIds.size(); ++i) { int id = knownGroupIds.at(i); SimObjectGroup *group = mKnownObjectGroups.value(id); if(!agentGroups.contains(group)) { //a known group does not exist any more. mKnownObjectGroups.remove(id); } } } knownGroupIds = mKnownObjectGroups.keys(); mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_AGENT_OVERVIEW); mWriteDatagram.writeInt(knownGroupIds.size()); sendDatagram(); for(int i = 0; i < agentGroups.size(); ++i) { //mDatagramMutex.unlock(); int id = knownGroupIds.at(i); SimObjectGroup *group = mKnownObjectGroups.value(id); //mDatagramMutex.lock(); mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_AGENT_OVERVIEW_NEXT); mWriteDatagram.writeInt(i); //index counter mWriteDatagram.writeInt(id); //group id mWriteDatagram.writeString(group->getType()); //type int stillAvailable = (mOwner->isGroupControlled(group)) ? 0 : 1; mWriteDatagram.writeByte(stillAvailable); //availability mWriteDatagram.writeString(group->getName()); sendDatagram(); } if(!waitForConfirmation(SeedUDPCommunication::UDP_AGENT_OVERVIEW_ACK)) { return false; } return true; }
/** * Sends datagram packet to a multicast address and broadcast list specified in settings. * @param lpszData Datagram packet to be broadcasted. */ void wavrUdpNetwork::sendBroadcast(QString* lpszData) { if(!isRunning) { wavrTrace::write("Warning: UDP server not running. Broadcast not sent"); return; } QByteArray datagram = lpszData->toUtf8(); sendDatagram(multicastAddress, datagram); for(int index = 0; index < broadcastList.count(); index++) { sendDatagram(broadcastList.at(index), datagram); } }
bool SeedUDPClientHandler::executeSendCommunicationResetMessage() { mSendCommunicationResetInfoMessage = false; mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_RESET_COMMUNICATION_ACK); sendDatagram(); mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_RESET_SIMULATION_ACK); sendDatagram(); return true; }
bool TCore::list() { enum ControlSymbols { I = 0x01, F,//0x02 HEX,//0x03 }; const qint8 id = 3; QByteArray data(56,0); qint8 oper1 = id; moveWidget(id, LIST, 200, 10, 200, 300); memcpy(data.data(), &oper1, 1); oper1 = MainWindow::LIST; memcpy(data.data()+1, &oper1, 1); oper1 = MainWindow::VALUE; memcpy(data.data()+2, &oper1, 1); qint32 value1 = 13; oper1 = I; memcpy(data.data()+3, &oper1, 1); memcpy(data.data()+4, &value1, 4); memcpy(data.data()+8, "th pickaninny toward to sea...; ", 32); float valueF = 3.14; oper1 = F; memcpy(data.data()+40, &oper1, 1); memcpy(data.data()+41, &valueF, 4); memcpy(data.data()+45, " - pi.", 6); oper1 = HEX; memcpy(data.data()+51, &oper1, 1); value1 = 21; memcpy(data.data()+52, &value1, 4); sendDatagram(address, remoutePort, data); return true; }
bool SeedUDPClientHandler::handleAgentDeregistrationCommand() { if(mOwner == 0) { return false; } int id = mReadDatagram.readNextInt(); mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_DEREGISTER_FROM_AGENT_ACK); mWriteDatagram.writeInt(id); if(mInterfaceGroups.keys().contains(id)) { InterfaceGroup *iGroup = mInterfaceGroups.take(id); if(iGroup == 0 || iGroup->mAssociatedObjectGroup == 0) { Core::log("SeedUPDClientHandler: Invalid state of interface group."); return false; } bool ok = mOwner->deregisterGroupController(iGroup->mAssociatedObjectGroup, this); mWriteDatagram.writeByte(ok ? 1 : 0); delete iGroup; } else { mWriteDatagram.writeByte(2); //signals: was not registered before. } sendDatagram(); return true; }
void inquiry() { Datagram dg; // This is a testing example /* inquiry_result_t btDev[2]; strcpy(btDev[0].addr, "000A3A58F310"); strcpy(btDev[0].name, "Elm327"); strcpy(btDev[0].cod, "12345"); strcpy(btDev[1].addr, "0003C92DB48F"); strcpy(btDev[1].name, "Nokia"); strcpy(btDev[1].cod, "56789"); */ QString inquiryResult; inquiryResult.clear(); inquiryResult.append(3); inquiryResult.append("Nokia,0003C92DB48F,66894.Elm327,000A3A58F310,41847.HTC Vision,0005DY51K8X3,98017."); qDebug() << "\tPrinting: \"" <<inquiryResult.toStdString().c_str() << "\""; constructDatagram(&dg, RESPONSE, INQUIRY, strlen(inquiryResult.toStdString().c_str()), (unsigned char *)inquiryResult.toStdString().c_str()); sendDatagram(&serial, &dg); }
void UDPServer::listButtons() { QString msg = "10;"; msg += Mapper::instance()->getSelectedController().printAll(); //msg += "TODO: append button list"; sendDatagram(msg.toLatin1()); }
void DisplayRenderer::sendDisplayData(QImage im1, QImage im2) { qDebug() << "sending data for displays"; PC2TB_PACKET outPacket; // pack tha packet: outPacket.magicNumber1 = MAGIC_NUMBER1; outPacket.magicNumber2 = MAGIC_NUMBER2; outPacket.packetVersion = PACKET_VERSION; QTime midnight(0,0); int time_ms = midnight.msecsTo(MainWindow::app()->getTimeBaseTime()); uint32_t time_100us = 10*time_ms; outPacket.pcTime_100us = time_100us; // ALGE text memcpy(outPacket.algeText, algeText().toAscii().data(), ALGE_TEXT_LEN); genMatrixData(im1, 1, outPacket.matrixData1); genMatrixData(im2, 2, outPacket.matrixData2); outPacket.matrixDataValid=1; outPacket.cmdReceiver=COMMAND_INVALID_RECEIVER; outPacket.command=COMMAND_INVALID_CMD; outPacket.crc = CRC8_run((uint8_t*)(&outPacket), (uint16_t)(sizeof(PC2TB_PACKET)-1)); QByteArray datagram; datagram.setRawData((char*)(&outPacket), sizeof(PC2TB_PACKET)); emit sendDatagram(datagram); }
bool SeedUDPClientHandler::handleValueDeregistrationCommand() { int numberOfIds = mReadDatagram.readNextInt(); mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_DEREGISTER_FROM_VALUE_ACK); mWriteDatagram.writeInt(numberOfIds); for(int i = 0; i < numberOfIds; ++i) { int id = mReadDatagram.readNextInt(); bool foundId = false; QList<Value*> knownValues = mKnownValues.keys(); for(int j = 0; j < knownValues.size(); ++j) { Value *value = knownValues.at(i); if(mKnownValues.value(value) == id) { foundId = true; if(mRegisteredValues.contains(value)) { mRegisteredValues.removeAll(value); } } } if(foundId) { mWriteDatagram.writeInt(id); } else { mWriteDatagram.writeInt(0); //id was not known, so no deregistration took place } } sendDatagram(); return true; }
void UDPServer::supportedDevices(const QString cmd) { QString msg = "10;"; QMap<QString, int> map; QString cmdStr; QString methodString; qDebug() << "cmd" << cmd; QStringList cmdList; cmdList = cmd.split(' '); cmdList.removeFirst(); for(int i = 0; i < cmdList.size(); i++) { int intPos = cmdList[i].size() - 1; int number = cmdList[i].toLower().data()[intPos].digitValue(); cmdStr = cmdList[i].remove(intPos,1); map[cmdStr] = number; } methodString.append(QString("b %1,").arg(map.value("b", 0))); methodString.append(QString("p %1,").arg(map.value("p", 0))); methodString.append(QString("v %1").arg(map.value("v", 0))); qDebug() << "methodString: " << methodString; msg += SupportedDevices::instance()->printDevicesWithString(methodString); sendDatagram(msg.toLatin1()); }
bool SeedUDPClientHandler::handleEventRegistrationCommand() { int id = 0; QString eventName = mReadDatagram.readNextString(); if(eventName.compare("") != 0) { EventManager *em = Core::getInstance()->getEventManager(); Event *event = em->registerForEvent(eventName, this); if(event != 0) { if(mRegisteredEvents.keys().contains(event)) { id = mRegisteredEvents.value(event); } else { id = mEventIdCounter++; mRegisteredEvents.insert(event, id); } } } mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_REGISTER_FOR_EVENT_ACK); mWriteDatagram.writeInt(id); sendDatagram(); return true; }
int Worker::sendBitmask() { Datagram dg; unsigned char * bitmask; // FLEX: requests the bitmask receiveDatagram(serial, &dg); if (dg.type != REQUEST || dg.id != GET_BITMASK) { qDebug() << "Expected bitmap request!"; return -1; } // PC: sends the bitmask bitmask = new unsigned char[((Vehicle *)vehicle)->getBitmaskSize()]; ((Vehicle *)vehicle)->getBitmask(bitmask); constructDatagram(&dg, RESPONSE, GET_BITMASK, ((Vehicle *)vehicle)->getBitmaskSize(), bitmask); sendDatagram(serial, &dg); destructDatagramData(&dg); // switch to data request loop return 0; }
bool TCore::graph() { enum CommandTypes { ADD_KOORD = 0, SETXTITLE, SETYTITLE, }; //graphbody set val const qint8 id = 5; static float t = 0; if(!t) moveWidget(id, GRAPH, 460, 300, 300, 300); t += 0.1; QByteArray data(12,0); qint8 oper1 = id; memcpy(data.data(), &oper1, 1); oper1 = GRAPH; memcpy(data.data()+1, &oper1, 1); oper1 = VALUE; memcpy(data.data()+2, &oper1, 1); static qint32 value = 0; oper1 = ADD_KOORD; memcpy(data.data()+3, &oper1, 1); value = 10*t*cos(t); memcpy(data.data()+4, &value, 4); value = 10*t*sin(t); memcpy(data.data()+8, &value, 4); /*value = t; memcpy(data.data()+12, &value, 4); value = cos(t); memcpy(data.data()+16, &value, 4);*/ sendDatagram(address, remoutePort, data); //graphbody set title data.resize(12); oper1 = id; memcpy(data.data(), &oper1, 1); oper1 = GRAPH; memcpy(data.data()+1, &oper1, 1); oper1 = VALUE; memcpy(data.data()+2, &oper1, 1); qint8 oper2 = SETXTITLE; memcpy(data.data()+3, &oper2, 1); memcpy(data.data()+4, "x values", 8); sendDatagram(address, remoutePort, data); return true; }
GroundStation::GroundStation(QWidget *parent) // : QPushButton(tr("Quit"), parent) { // connect(&timer, SIGNAL(timeout()), this, SLOT(sendDatagram())); // timer.start(2 * 1000); sendDatagram(); }
void UDPServer::sendDeviceList() { QString dvcs = "10;"; if(UsableControllers::printAllShortList().isEmpty()) dvcs += "No usable controllers connected!"; else dvcs += QString(UsableControllers::printAllShortList()); sendDatagram(dvcs.toLatin1()); }
void UDPServer::handleDataRequest(QString data) { qDebug() << "UDPServer::handleDataRequest called with data:" << data; QString cmd = data.section(';',1,1).toLower(); switch (COMMANDS.indexOf(cmd.section(' ',0,0))) { case 0: // Help command (help) qDebug() << "help command called"; sendHelp(); break; case 1: // List devices command (lsdvs) qDebug() << "List devices command called"; sendDeviceList(); break; case 2: // Select device command (sldvc) qDebug() << "Select device command called"; selectDevice(cmd); break; case 3: // Deselect device command (dsdvc) qDebug() << "Deselect device command called"; deselectDevice(); break; case 4: // List buttons command (lsbts) qDebug() << "List buttons command called"; listButtons(); break; case 5: // Keymap command (kmap) qDebug() << "Keymap command called"; mapKey(cmd); break; case 6: // Undo keymap command (umap) qDebug() << "Undo keymap command called"; unmapKey(cmd); break; case 7: // Supported devices command (supdvs) qDebug() << "Supported devices command called"; supportedDevices(cmd); break; case 8: // Axis Format Map (afmap) qDebug() << "Axis Format Map command called"; axisFormatMap(cmd); break; case 9: // Axis Key Map (akmap) qDebug() << "Axis Key Map command called"; axisKeyMap(cmd); break; default: qDebug() << "Command not recognised"; QString reply = "10;"; reply += "\'" + cmd.section(' ',0,0) + "\'"; reply += " is not recognized as a command, use the \'help\' command for more information"; sendDatagram(reply.toLatin1()); break; } emit dataAvailable(data); }
void loop() { for (;;) { //receiveBitmask(); unsigned int value, j; unsigned char buff[10]; unsigned char cmd; bool goOn = true; do { //FLEX: request loop //for (int i=0; i<bitmaskSize*8; i++) { for (int i=0; i<4; i++) { qDebug() << "Dentro: "<< i; Datagram dg; unsigned int d; d = (1.0 + sin(t))/2.0 * 125.0; t += 0.01; if (i == 2) {// RPM d *= 17000 / 125; qDebug() << "sending:" << d; } value = d; for (j=0; value != 0; j++) { buff[j] = value % 256; value /= 256; } buff[j] = '\0'; if (j == 0) { buff[0] = 0; buff[1] = '\0'; j = 1; } qDebug() << "Monitor: " << i; qDebug() << "Data: " << i; qDebug() << " "; constructDatagram(&dg, DATA, i, j, buff); sendDatagram(&serial,&dg); usleep(10000); } //FLEX: c’è = readUART1(&something) } while (goOn); cmd = -1; if (cmd == STOP) { qDebug() << "Stop request"; exit(0); } else if (cmd != GET_BITMASK) { qDebug() << "Expected bitmask request!"; exit(1); } } }
void NetworkHandler::sendColor(const QColor &color) { if(color.isValid() && time_.elapsed() >= 50) { QString myRgb; myRgb.append((quint8)(color.redF()*255)); myRgb.append((quint8)(color.greenF()*255)); myRgb.append((quint8)(color.blueF()*255)); sendDatagram(myRgb); } }
bool SeedUDPClientHandler::handleValueListCommand() { ValueManager *vm = Core::getInstance()->getValueManager(); QString regExp = mReadDatagram.readNextString(); QList<QString> valueNames = vm->getValueNamesMatchingPattern(regExp); mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_VALUE_IDS); mWriteDatagram.writeInt(valueNames.size()); sendDatagram(); for(int i = 0; i < valueNames.size(); ++i) { Value *value = vm->getValue(valueNames.at(i)); int id = -1; if(value != 0) { if(mKnownValues.keys().contains(value)) { id = mKnownValues.value(value); } else { id = mValueIdCounter++; mKnownValues.insert(value, id); } } mWriteDatagram.clear(); mWriteDatagram.writeByte(SeedUDPCommunication::UDP_VALUE_INFO); mWriteDatagram.writeInt(i); mWriteDatagram.writeInt(id); if(value == 0) { mWriteDatagram.writeString(""); } else { mWriteDatagram.writeString(value->getName()); } mWriteDatagram.writeString(valueNames.at(i)); sendDatagram(); } return true; }
void UDPServer::sendControllerAction(const QString action) { qDebug() << "UDPServer::sendControllerAction entered, taking appropriate action"; QString msg = "20;"; msg += action; // TODO: make reaction dependable on value of action // for now just send the action to the client sendDatagram(msg.toLatin1()); }
void UDPServer::deselectDevice() { QString msg = "10;"; if(Mapper::instance()->tryDeviceSelect(-1)) msg += "Device successfully deselected!"; else msg += "Error: Device was not deselected, please try again"; sendDatagram(msg.toLatin1()); }
// AME = Alive Message Expected void UDPServer::sendAME() { QString address = udpSocket->localAddress().toString(); quint16 port = udpSocket->localPort(); QByteArray datagram = "4;" + address.toLatin1() + ";" + QByteArray::number(port); startAliveTimer(); sendDatagram(datagram); qDebug() << "AME Message sent"; }
void UDPServer::sendSYNACK() { QString address = otherNodeAddress(); quint16 port = udpSocket->localPort(); QByteArray datagram = "2;" + address.toLatin1() + ";" + QByteArray::number(port); startTimeOutTimer(); sendDatagram(datagram); qDebug() << "SYN-ACK Message sent"; }