/
fileport.cpp
104 lines (82 loc) · 1.91 KB
/
fileport.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "fileport.h"
#include <QFileDialog>
FilePort::FilePort(QString inputFilename, QString outputFilename) :
PUMCommunication()
{
commDevice = NULL;
inputFile = NULL;
deviceName = "File";
setOutputCommFile(outputFilename);
setInputCommFile(inputFilename);
protocol = new PUMProtocol();
}
FilePort::~FilePort()
{
if(commDevice != NULL)
{
delete commDevice;
commDevice = NULL;
delete inputFile;
inputFile = NULL;
localThread.exit(0);
}
delete protocol;
}
void FilePort::setInputCommFile(QString filename)
{
if(inputFilename == filename)
return;
inputFilename = filename;
if(inputFile != NULL)
{
inputFile->close();
delete inputFile;
inputFile = NULL;
}
inputFile = new QFile(filename);
}
void FilePort::setOutputCommFile(QString filename)
{
if(outputFilename == filename)
return;
outputFilename = filename;
if(commDevice != NULL)
{
commDevice->close();
delete commDevice;
commDevice = NULL;
}
commDevice = new QFile(filename);
}
void FilePort::open()
{
if(commDevice == NULL)
commDevice = new QFile(outputFilename);
commDevice->open(QIODevice::WriteOnly);
if(inputFile == NULL)
inputFile = new QFile(inputFilename);
inputFile->open(QIODevice::ReadOnly);
}
bool FilePort::isValid()
{
if(commDevice == NULL || inputFile == NULL)
return false;
if(!(commDevice->isWritable() && inputFile->isReadable()))
return false;
return true;
}
Message FilePort::read()
{
Message msg = protocol->unpack(inputFile->readLine());
emit messageReceived(msg);
logIt(msg);
return msg;
}
void FilePort::close()
{
dynamic_cast<QFile*>(commDevice)->flush();
if(commDevice->isOpen())
commDevice->close();
if(inputFile->isOpen())
inputFile->close();
}