-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconnectionmanager.cpp
More file actions
65 lines (51 loc) · 1.75 KB
/
Copy pathconnectionmanager.cpp
File metadata and controls
65 lines (51 loc) · 1.75 KB
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
#include "connectionmanager.h"
#include <QMutexLocker>
#include <ssh/sshconnection.h>
#include <projectexplorer/devicesupport/idevice.h>
#include "connection/sftpconnection.h"
using namespace RemoteDev;
using namespace RemoteDev::Internal;
ConnectionManager *ConnectionManager::m_instance;
ConnectionManager::ConnectionManager(QObject *parent) :
QObject(parent),
m_connectionPoolMutex(QMutex::NonRecursive)
{
m_instance = this;
}
ConnectionManager::~ConnectionManager()
{
disconnect(this, SLOT(onConnectionError()));
disconnect(this, SLOT(onDisconnected()));
}
ConnectionManager *ConnectionManager::instance()
{
return m_instance;
}
Connection::Ptr ConnectionManager::connectionForDevice(const ProjectExplorer::IDevice &device)
{
Connection::Ptr connection(nullptr);
QMutexLocker locker(&m_instance->m_connectionPoolMutex);
if (! m_instance->m_connectionPool.contains(device.id())) {
QSsh::SshConnectionParameters params = device.sshParameters();
// Defaul localhost device has invalid parameters!
// TODO: test if Localhost device works
if (!params.host.isEmpty() && params.port != 0) {
connection = Connection::Ptr(new SftpConnection(device.displayName(), params));
m_instance->m_connectionPool.insert(device.id(), connection);
}
} else {
connection = m_instance->m_connectionPool.value(device.id());
}
locker.unlock();
return connection;
}
void ConnectionManager::onDisconnected()
{
Connection::Ptr connection(qobject_cast<Connection *>(sender()));
emit disconnected(connection);
}
void ConnectionManager::onConnectionError()
{
Connection::Ptr connection(qobject_cast<Connection *>(sender()));
emit connectionError(connection);
}