[GUI] Add connection loss detection and reestablishment

This commit is contained in:
Nathan Hourt 2015-07-14 16:49:17 -04:00
parent 1813e9f5f6
commit d176429dad
3 changed files with 18 additions and 4 deletions

View file

@ -156,6 +156,7 @@ void GrapheneApplication::start( QString apiurl, QString user, QString pass )
m_client = std::make_shared<fc::http::websocket_client>(); m_client = std::make_shared<fc::http::websocket_client>();
ilog( "connecting...${s}", ("s",apiurl.toStdString()) ); ilog( "connecting...${s}", ("s",apiurl.toStdString()) );
auto con = m_client->connect( apiurl.toStdString() ); auto con = m_client->connect( apiurl.toStdString() );
m_connectionClosed = con->closed.connect([this]{queueExecute([this]{setIsConnected(false);});});
auto apic = std::make_shared<fc::rpc::websocket_api_connection>(*con); auto apic = std::make_shared<fc::rpc::websocket_api_connection>(*con);
auto remote_api = apic->get_remote_api< login_api >(1); auto remote_api = apic->get_remote_api< login_api >(1);
auto db_api = apic->get_remote_api< database_api >(0); auto db_api = apic->get_remote_api< database_api >(0);

View file

@ -129,6 +129,8 @@ class GrapheneApplication : public QObject {
ChainDataModel* m_model = nullptr; ChainDataModel* m_model = nullptr;
bool m_isConnected = false; bool m_isConnected = false;
boost::signals2::scoped_connection m_connectionClosed;
std::shared_ptr<fc::http::websocket_client> m_client; std::shared_ptr<fc::http::websocket_client> m_client;
fc::future<void> m_done; fc::future<void> m_done;

View file

@ -14,10 +14,6 @@ ApplicationWindow {
height: 480 height: 480
title: qsTr("Hello World") title: qsTr("Hello World")
Component.onCompleted: {
app.start("ws://localhost:8090", "user", "pass")
}
menuBar: MenuBar { menuBar: MenuBar {
Menu { Menu {
title: qsTr("File") title: qsTr("File")
@ -32,9 +28,22 @@ ApplicationWindow {
} }
} }
} }
statusBar: StatusBar {
Label {
anchors.right: parent.right
text: app.isConnected? qsTr("Connected") : qsTr("Disconnected")
}
}
GrapheneApplication { GrapheneApplication {
id: app id: app
}
Timer {
running: !app.isConnected
interval: 5000
repeat: true
onTriggered: app.start("ws://localhost:8090", "user", "pass")
triggeredOnStart: true
} }
Settings { Settings {
id: appSettings id: appSettings
@ -47,6 +56,8 @@ ApplicationWindow {
Column { Column {
anchors.centerIn: parent anchors.centerIn: parent
enabled: app.isConnected
Button { Button {
text: "Transfer" text: "Transfer"
onClicked: formBox.showForm(Qt.createComponent("TransferForm.qml"), {}, onClicked: formBox.showForm(Qt.createComponent("TransferForm.qml"), {},