Skip to content

Commit 35a5a56

Browse files
cordova-angular: use new pause event API
Uses the new 'pauseLock.release()' API to suspend the app only after the socket.io server closes. Keeps track of every socket to close the underlying connection in the pause event. Adds a error event listener to not crash when the OS forcibly closes an unclosed socket when the application suspends.
1 parent 09c47a4 commit 35a5a56

File tree

1 file changed

+37
-5
lines changed
  • cordova-angularjs/src/server

1 file changed

+37
-5
lines changed

cordova-angularjs/src/server/main.js

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,35 @@ io.on('connection', (newSocket) => {
5151
console.log('Socket.io: error: ' + err);
5252
});
5353

54-
newSocket.on('disconnect', () => {
55-
console.log('Socket.io: disconnected');
54+
newSocket.on('close', () => {
55+
console.log('Socket.io: close ');
56+
});
57+
58+
newSocket.on('disconnecting', (reason) => {
59+
console.log('Socket.io: disconnecting. Reason: ' + reason);
60+
});
61+
62+
newSocket.on('disconnect', (reason) => {
63+
console.log('Socket.io: disconnected. Reason: ' + reason);
5664
newSocket.removeAllListeners();
5765
});
5866
});
5967

68+
// Keep a set of all connected sockets to destroy destroy when trying to close the server.
69+
let connectedSockets = new Set();
70+
server.on('connection', (conn) => {
71+
connectedSockets.add(conn);
72+
conn.on('close', () => {
73+
console.log('Socket.io: close ');
74+
connectedSockets.delete(conn);
75+
});
76+
});
77+
78+
// Catch errors from the OS when the server is not closed before app suspension.
79+
server.on('error', (err) => {
80+
console.log('Server error: ' + JSON.stringify(err));
81+
});
82+
6083
function server_start() {
6184
if (!server.listening) {
6285
server.listen(8081, () => {
@@ -68,14 +91,23 @@ function server_start() {
6891
if (isMobile) {
6992
const cordova = require('cordova-bridge');
7093

71-
cordova.app.on('pause', () => {
72-
console.log('NodeJS received a pause event.');
73-
server.close();
94+
cordova.app.on('pause', (lock) => {
95+
io.close( () => {
96+
console.log("Node: I have closed the server.")
97+
lock.release();
98+
});
99+
// The server will only close after all underlying connections have been destroyed.
100+
var socketsToDestroy = connectedSockets.values();
101+
connectedSockets.forEach( (sock) => {
102+
sock.destroy();
103+
});
104+
cordova.channel.post('angular-log', "pause event received.");
74105
});
75106

76107
cordova.app.on('resume', () => {
77108
console.log('NodeJS received a resume event.');
78109
server_start();
110+
cordova.channel.post('angular-log', "resume event received.");
79111
});
80112

81113
let listenersBackup = {};

0 commit comments

Comments
 (0)