/
link.h
123 lines (103 loc) · 2.91 KB
/
link.h
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/** @file link.h Network connection to a server.
*
* @authors Copyright © 2013 Jaakko Keränen <jaakko.keranen@iki.fi>
*
* @par License
* GPL: http://www.gnu.org/licenses/gpl.html
*
* <small>This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version. This program is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details. You should have received a copy of the GNU
* General Public License along with this program; if not, see:
* http://www.gnu.org/licenses</small>
*/
#ifndef LIBSHELL_LINK_H
#define LIBSHELL_LINK_H
#include "libshell.h"
#include <de/Address>
#include <de/Socket>
#include <de/Time>
#include <de/Transmitter>
#include <de/shell/Protocol>
#include <QObject>
namespace de {
namespace shell {
/**
* Network connection to a server using the shell protocol.
*/
class LIBSHELL_PUBLIC Link : public QObject, public Transmitter
{
Q_OBJECT
public:
enum Status
{
Disconnected,
Connecting,
Connected
};
public:
/**
* Opens a connection to a server over the network.
*
* @param domain Domain/IP address of the server.
* @param timeout Keep trying until this much time has passed.
*/
Link(String const &domain, TimeDelta const &timeout = 0);
/**
* Opens a connection to a server over the network.
*
* @param address Address of the server.
*/
Link(Address const &address);
/**
* Takes over an existing socket.
*
* @param openSocket Socket. Link takes ownership.
*/
Link(Socket *openSocket);
virtual ~Link();
/**
* Peer address of the link. The address may be a null address if the IP
* address hasn't been resolved yet.
*/
Address address() const;
/**
* Current status of the connection.
*/
Status status() const;
/**
* Returns the time when the link was successfully connected.
*/
Time connectedAt() const;
/**
* Shell protocol for constructing and interpreting packets.
*/
Protocol &protocol();
/**
* Returns the next received packet.
*
* @return Received packet. Ownership given to caller. Returns @c NULL if
* there are no more packets ready.
*/
Packet *nextPacket();
// Transmitter.
void send(IByteArray const &data);
protected slots:
void socketConnected();
void socketDisconnected();
signals:
void addressResolved();
void connected();
void disconnected();
void packetsReady();
private:
struct Instance;
Instance *d;
};
} // namespace shell
} // namespace de
#endif // LIBSHELL_LINK_H