Reconnect push notifications (close #34)
This commit is contained in:
parent
a9202d29c4
commit
7917f11f1d
|
@ -35,7 +35,7 @@ public class Tootle.NetManager : GLib.Object {
|
|||
GLib.Object();
|
||||
}
|
||||
|
||||
public async WebsocketConnection stream (Soup.Message msg) {
|
||||
public async WebsocketConnection stream (Soup.Message msg) throws GLib.Error {
|
||||
return yield session.websocket_connect_async (msg, null, null, null);
|
||||
}
|
||||
|
||||
|
|
|
@ -3,8 +3,10 @@ using Soup;
|
|||
|
||||
public class Tootle.Notificator : GLib.Object {
|
||||
|
||||
WebsocketConnection? connection;
|
||||
Soup.Message msg;
|
||||
private WebsocketConnection? connection;
|
||||
private Soup.Message msg;
|
||||
private bool closing = false;
|
||||
private int timeout = 2;
|
||||
|
||||
public abstract signal void notification (ref Notification notification);
|
||||
public abstract signal void status_added (ref Status status);
|
||||
|
@ -17,17 +19,39 @@ public class Tootle.Notificator : GLib.Object {
|
|||
}
|
||||
|
||||
public async void start () {
|
||||
debug ("Starting notificator");
|
||||
connection = yield Tootle.network.stream (msg);
|
||||
connection.error.connect (on_error);
|
||||
connection.message.connect (on_message);
|
||||
try {
|
||||
debug ("Starting notificator");
|
||||
connection = yield Tootle.network.stream (msg);
|
||||
connection.error.connect (on_error);
|
||||
connection.message.connect (on_message);
|
||||
connection.closed.connect (on_closed);
|
||||
}
|
||||
catch (GLib.Error e) {
|
||||
warning (e.message);
|
||||
on_closed ();
|
||||
}
|
||||
}
|
||||
|
||||
public void close () {
|
||||
debug ("Stopping notificator");
|
||||
closing = true;
|
||||
connection.close (0, null);
|
||||
}
|
||||
|
||||
private bool reconnect () {
|
||||
start ();
|
||||
return false;
|
||||
}
|
||||
|
||||
private void on_closed () {
|
||||
if (closing)
|
||||
return;
|
||||
|
||||
debug ("Notificator aborted. Reconnecting in %i seconds.", timeout);
|
||||
GLib.Timeout.add_seconds (timeout, reconnect);
|
||||
timeout = int.min (timeout*2, 60);
|
||||
}
|
||||
|
||||
private void on_error (Error e) {
|
||||
error (e.message);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue