FileConveyor::FileConveyor(QWidget *parent) : QWidget(parent), ui(new Ui::FileConveyor) { ui->setupUi(this); sender = new Sender; ui->stackedWidget->addWidget(sender); receiver = new Receiver; ui->stackedWidget->addWidget(receiver); connect(ui->sendPushButton, SIGNAL(clicked()), this, SLOT(onSending())); connect(sender, SIGNAL(finished()), this, SLOT(onFinished())); connect(sender, SIGNAL(error()), this, SLOT(onError())); connect(ui->recvPushButton, SIGNAL(clicked()), this, SLOT(onReceive())); connect(receiver, SIGNAL(finished()), this, SLOT(onFinished())); connect(receiver, SIGNAL(error()), this, SLOT(onError())); }
void TCPClient::receive(Exception& ex, UInt32 available) { if (available>0) onSending(0); // to update _idleTime if (available == 0) { close(); // Graceful disconnection return; } UInt32 size(_pBuffer->size()); _pBuffer->resize(size+available,true); Exception exRecv; int received = _socket.receiveBytes(exRecv,_pBuffer->data()+size, available); if (received <= 0) { if (exRecv) OnError::raise(exRecv); // to be before onDisconnection! close(); // Graceful disconnection return; } else if (exRecv) ex.set(exRecv); // received > 0, so WARN _pBuffer->resize(size+received,true); size = 0; while(size<_pBuffer->size()) { // while everything is not consumed if (size) _pBuffer->clip(size); size = OnData::raise<0xFFFFFFFF>(_pBuffer); // consumed if (!size) // if no consumption return; // no release here } _pBuffer.release(); }