Помогите определить назначение программы и ее логическую структуру

  • Автор темы dmitryV
  • Дата начала
D

dmitryV

#1
// TCP клиент
#include "../net/net.h"

TCPClient::TCPClient(QObject * parent, const char * name) : QObject(parent, name), QDataStream()
{
err_counter = 0;
err_prev = 0;
socket = new TCPSocket(this);
connect(socket, SIGNAL(connected()), SLOT(socketConnected()));
connect(socket, SIGNAL(connectionClosed()), SLOT(socketConnectionClosed()));
connect(socket, SIGNAL(error(int)), SLOT(socketError(int)));
connect(socket, SIGNAL(delayedCloseFinished()), SLOT(socketClosed()));
connect(socket, SIGNAL(bytesWritten(int)), SLOT(socketWrite(int)));
setDevice(socket);
connect(&restart_timer, SIGNAL(timeout()), SLOT(restartTimeout()));
return;
}

void TCPClient::setName(const QString & name)
{
client_name = name;
return;
}

void TCPClient::restartConnection(const QString & host, Q_UINT16 port)
{
connection_host = host;
connection_port = port;
restart_connection = TRUE;
if(socket->state() == QSocket::Idle)
socket->connectToHost(connection_host, connection_port);
else
{
socket->close();
if(socket->state() != QSocket::Closing)
socketClosed();
}
return;
}

void TCPClient::closeConnection(void)
{
restart_connection = FALSE;
socket->close();
if(socket->state() != QSocket::Closing)
socketClosed();
return;
}

void TCPClient::socketConnected(void)
{
if(restart_timer.isActive())
restart_timer.stop();
emit StateMsg(tr("TCP клиент для") + " " + client_name + ": " + tr("выполнил соединение"), black);
emit connected();
return;
}

void TCPClient::socketConnectionClosed(void)
{
emit StateMsg(tr("TCP клиент для") + " " + client_name + ": " + tr("удаленный сервер закрыл соединение"), magenta);
emit connectionClosed();
if(restart_connection && !restart_timer.isActive())
restart_timer.start(RESTART_TIME_OUT);
return;
}

void TCPClient::socketClosed(void)
{
emit StateMsg(tr("TCP клиент для") + " " + client_name + ": " + tr("закрыл соединение"), darkMagenta);
emit connectionClosed();
if(restart_connection && !restart_timer.isActive())
restart_timer.start(RESTART_TIME_OUT);
return;
}

void TCPClient::socketError(int err)
{
err_counter++;
if(err_counter == 1 || err_prev != err)
{
switch(err)
{
case QSocket::ErrConnectionRefused :
emit StateMsg(tr("TCP клиент для") + " " + client_name + ": " + tr("соединение не выполнено", "connection refused"), magenta);
break;
case QSocket::ErrHostNotFound :
emit StateMsg(tr("TCP клиент для") + " " + client_name + ": " + tr("удаленный сервер не найден", "host not found"), magenta);
break;
case QSocket::ErrSocketRead :
emit StateMsg(tr("TCP клиент для") + " " + client_name + ": " + tr("ошибка чтения из сокета", "error socket read"), red);
break;
}
}
err_prev = err;
if(restart_connection && !restart_timer.isActive())
restart_timer.start(RESTART_TIME_OUT);
return;
}

void TCPClient::restartTimeout(void)
{
if(restart_connection)
{
if(socket->state() == QSocket::Idle)
socket->connectToHost(connection_host, connection_port);
}
else
restart_timer.stop();
return;
}

void TCPClient::socketWrite(int nbytes)
{
emit StateMsg(tr("TCP клиент для") + " " + client_name + ": " + tr("отправлено") + " " + QString::number(nbytes) + " " + tr("байт", "во множественном числе"), black);
return;
}
Посмотреть вложение net.h
 

Вложения

  • 5.4 КБ Просмотры: 101