Example #1
0
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()));
}
Example #2
0
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();
}