12 - Листинг (1061393), страница 3
Текст из файла (страница 3)
}
} while (C_Read != DATA_MARK);
wannaUseLog(tr("] <font color=blue>приём файла</font> <b>")
+ FileName + tr("</b>"));
}
// чтение данных
if(int(C_Read) == DATA_MARK)
{
DWORD write_counter;
QString FullName = configDemona->
value("file/pathForSave", "C:/").toString();
wannaUseLog(tr("] файл сохраняется в <b>")
+ FullName + tr("</b>..."));
FullName.append(tr("/") + FileName);
int progrProgr = 0;
QFile FileToSave(FullName);
if(FileToSave.open(QIODevice::ReadWrite))
{
CHAR FullByte;
short errors = 0;
do {
C_Read = NO_CHAR;
ReadFile(ListenPort, &C_Read, 1, &real_read, NULL);
if(C_Read == NO_CHAR) errors++; else errors = 0;
if(errors == MAX_ERRORS)
{
wannaUseLog(tr("] <font color=red>слишком много ошибок при передаче</font>"));
wannaUseLog(tr("] <font color=red>передача файла <b>")
+ FileName + tr("</b> была прервана</font>"));
break;
}
if(C_Read == B_MARK)
{
wannaUseLog(tr("] <font color=red>передача файла <b>")
+ FileName + tr("</b> была отменена</font>"));
break;
}
if (C_Read != S_MARK)
{
if(GetFullByte(C_Read, ListenPort, FullByte))
{
FileToSave.write(&FullByte, 1);
C_Read = A_MARK;
WriteFile(ListenPort, &C_Read, 1,
&write_counter, NULL);
} else {
C_Read = E_MARK;
WriteFile(ListenPort, &C_Read, 1,
&write_counter, NULL);
}
}
progrProgr++;
emit setProgr(progrProgr);
} while (C_Read != S_MARK);
FileToSave.close();
if((C_Read != B_MARK) && (errors != MAX_ERRORS))
wannaUseLog(tr("] <font color=green>файл сохранён</font>"));
wannaUseLog(tr("] <font color=green><b>приём успешно завершён</b></font>"));
emit progrFin();
}
}
}
}
}
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// --- начертили пентаграмму и читаем заклинание призыва Демона ----------------
void DemonPorta::run()
{
configDemona = new QSettings(qApp->applicationDirPath()+"/config.ini",
QSettings::IniFormat);
ListenPort(portHandle); // демон призван!
}
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// --- когда нажали на кнопку Передать -----------------------------------------
void MainWindow::on_sendFile_clicked()
{
ui->progressBar->setValue(0);
if(ui->lineEdit->text()!=tr("выберите файл для передачи...")
&& !ui->lineEdit->text().isEmpty())
{
logstr = tr("] <font color=blue>рукопожатие...</font>");
string2log(logstr);
// рукопожимаем
if(ComHandShake(workPort))
{
logstr = tr("] <font color=green>рукопожатие прошло успешно</font>");
string2log(logstr);
if(SendFile(config->value("file/fileToTransf",
qApp->applicationDirPath()+"/config.ini").toString()))
{
logstr = tr("] <font color=green><b>передача успешно завершилась<b></font>");
string2log(logstr);
}
else
{
logstr = tr("] <font color=red><b>не удалось передать файл</font>");
string2log(logstr);
}
}
else
{
logstr = tr("] <font color=red>рукопожатие не удалось</font>");
string2log(logstr);
enableSettingsChange();
attmpt = false;
portAlreadyChoosen = false;
if(CloseHandle(workPort))
{
logstr = "[";
currtime = currtime.currentTime();
logstr.append(currtime.toString());
logstr.append(tr("] порт <b>") + portstr + tr("</b> закрыт"));
ui->log->append(logstr);
logstr = "---------------------------------------------------";
if(ui->listenBtn->isChecked())
{
ui->listenBtn->setIcon(QIcon(":/picts/unlisten.gif"));
ui->listenBtn->setChecked(false);
}
ui->listenBtn->setEnabled(false);
ui->log->append(logstr);
ui->label->show();
ui->label_2->hide();
ui->groupBox->setEnabled(false);
ui->progressBar->setValue(0);
}
else
{
logstr = tr("] <font color=red>не удалось закрыть порт</font>");
string2log(logstr);
}
}
}
else
{
logstr = tr("] <font color=red>вы не выбрали файл</font>");
string2log(logstr);
}
}
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// --- когда нажали на кнопку прослушивания порта (призыва Демона!) ------------
void MainWindow::on_listenBtn_clicked()
{
if(!ui->listenBtn->isChecked())
{
ui->progressBar->setValue(0);
ComListener->terminate();
ui->listenBtn->setIcon(QIcon(":/picts/unlisten.gif"));
}
else
{
ui->progressBar->setValue(0);
ComListener->start();
ui->listenBtn->setIcon(QIcon(":/picts/listen.gif"));
config->setValue("file/pathForSave",
QFileDialog::getExistingDirectory(this,
tr("Выберите путь для сохранения"), "С:/",
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks));
}
}
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// до семисот строк на хватало двух, вот теперь хватает
==========================================================
--- mainwindow.h ----------------------------------------------------------------------------------
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <QThread>
#include <QTime>
#include <QSettings>
#include <windows.h>
#include "about.h"
namespace Ui {class MainWindow;}
class QKeyEvent;
class DemonPorta: public QThread
{
Q_OBJECT
public:
void run();
void ListenPort(HANDLE ListenPort);
HANDLE portHandle;
public slots:
void setPortHandle(HANDLE curPort);
signals:
void wannaUseLog(QString);
void setProgr(int);
void progrFin();
private:
QSettings *configDemona;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void on_selectFile_clicked();
void on_tryToConnect_clicked();
void on_tryToDisconnect_clicked();
void BaudRateChanged(QString param);
void DataBitsChanged(QString param);
void ParityChanged(int param);
void StopBitsChanged(int param);
void on_sendFile_clicked();
void on_listenBtn_clicked();
void toLog(QString strToLog);
void setProgr(int val);
void finProgr();
signals:
void curPortHandle(HANDLE);
private:
Ui::MainWindow *ui;
QFileDialog file;
About *ab;
DemonPorta *ComListener;
QSettings *config;
QString logstr, portstr;
QTime currtime;
void string2log (QString logstr);
bool ComHandShake(HANDLE UsePort);
bool SendFile(QString FileName);
void disableSettingsChange();
void enableSettingsChange();
HANDLE OpenPort(QString PortName);
HANDLE workPort;
protected:
void keyPressEvent(QKeyEvent *event);
};
#endif // MAINWINDOW_H
==========================================================