void TcpClient::sendToServer(QString data)
{
if (_socket != Q_NULLPTR)
{
res = "";
while (_socket->state() != QAbstractSocket::ConnectedState)
{
if (_socket->state() != QAbstractSocket::ConnectingState && _socket->state() != QAbstractSocket::HostLookupState)
{
_socket->connectToHost(_name, _port); // try to connect
alreadyConnected = true;
}
QApplication::processEvents();
QThread::currentThread()->msleep(NET_IO_CONNECT_DELAY);
qDebug() << "waiting for connection";
}
if (alreadyConnected) // we connected to server few times ago. Let's wait
{
QThread::currentThread()->msleep(NET_IO_DELAY_AFTER_CONNECTION);
alreadyConnected = false;
}
qDebug() << "Send to server";
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_6);
out << (quint16)0; // Забиваем память под размер
out << _realId; // записываем реальные данные
out << data; // еще немного реальных данных
out.device()->seek(0); // переходим на начало
out << (quint16)(block.size() - sizeof(quint16) - sizeof(quint64)); // записываем размер сообщения
quint64 sss = _socket->write(block); // отправляем в сокет
if (sss < block.size()) // сокет сожрал не все
qDebug() << "Буфер маловат будет!" << sss << " != " << block.size(); //
else if (sss > block.size()) // сокет сожрал больше, чем необходимо
qDebug() << "Что-то лишнее в буфере! " << sss << " != " << block.size(); //
qDebug() << "Data written: " << data; // сокет все-таки молодец
_socket->flush(); // выталкиваем данные в сеть
_lastMessage = data;
_timeOutTimer->setSingleShot(true); // ждем немного
_timeOutTimer->start(NET_IO_DELAY); // чтобы сетевой стек успел отправить данные
}
else qDebug() << "Socket is null!";
}
void someFunction(int index, Value *value) {
if (value!=NULL)
switch(index) {
case 0:
SomeTypeOne t = someObject->someMethodOne(); // возвращает SomeTypeOne
value->type = "SomeTypeOne";
break;
case 1:
SomeTypeTwo t = someObject->someMethodTwo(); // возвращает SomeTypeTwo
value->type = "SomeTypeTwo";
break;
}
}