diff --git a/ElectronNET.API/PowerMonitor.cs b/ElectronNET.API/PowerMonitor.cs index 2b1c802..8954904 100644 --- a/ElectronNET.API/PowerMonitor.cs +++ b/ElectronNET.API/PowerMonitor.cs @@ -64,6 +64,156 @@ namespace ElectronNET.API } private event Action _unlockScreen; + + /// + ///Emitted when the system is suspending. + /// + public event Action OnSuspend + { + add + { + if (_suspend == null) + { + BridgeConnector.Socket.On("pm-suspend", () => + { + _suspend(); + }); + + BridgeConnector.Socket.Emit("register-pm-suspend"); + } + _suspend += value; + } + remove + { + _suspend -= value; + + if (_suspend == null) + BridgeConnector.Socket.Off("pm-suspend"); + } + } + + private event Action _suspend; + + /// + ///Emitted when system is resuming. + /// + public event Action OnResume + { + add + { + if (_resume == null) + { + BridgeConnector.Socket.On("pm-resume", () => + { + _resume(); + }); + + BridgeConnector.Socket.Emit("register-pm-resume"); + } + _resume += value; + } + remove + { + _resume -= value; + + if (_resume == null) + BridgeConnector.Socket.Off("pm-resume"); + } + } + + private event Action _resume; + + /// + ///Emitted when the system changes to AC power. + /// + public event Action OnAC + { + add + { + if (_onAC == null) + { + BridgeConnector.Socket.On("pm-on-ac", () => + { + _onAC(); + }); + + BridgeConnector.Socket.Emit("register-pm-on-ac"); + } + _onAC += value; + } + remove + { + _onAC -= value; + + if (_onAC == null) + BridgeConnector.Socket.Off("pm-on-ac"); + } + } + + private event Action _onAC; + + /// + ///Emitted when system changes to battery power. + /// + public event Action OnBattery + { + add + { + if (_onBattery == null) + { + BridgeConnector.Socket.On("pm-on-battery", () => + { + _onBattery(); + }); + + BridgeConnector.Socket.Emit("register-pm-on-battery"); + } + _onBattery += value; + } + remove + { + _onBattery -= value; + + if (_onBattery == null) + BridgeConnector.Socket.Off("pm-on-battery"); + } + } + + private event Action _onBattery; + + + /// + ///Emitted when the system is about to reboot or shut down. If the event handler + ///invokes `e.preventDefault()`, Electron will attempt to delay system shutdown in + ///order for the app to exit cleanly.If `e.preventDefault()` is called, the app + ///should exit as soon as possible by calling something like `app.quit()`. + /// + public event Action OnShutdown + { + add + { + if (_shutdown == null) + { + BridgeConnector.Socket.On("pm-shutdown", () => + { + _shutdown(); + }); + + BridgeConnector.Socket.Emit("register-pm-shutdown"); + } + _shutdown += value; + } + remove + { + _shutdown -= value; + + if (_shutdown == null) + BridgeConnector.Socket.Off("pm-on-shutdown"); + } + } + + private event Action _shutdown; + private static PowerMonitor _powerMonitor; private static object _syncRoot = new object(); diff --git a/ElectronNET.Host/api/powerMonitor.js b/ElectronNET.Host/api/powerMonitor.js index be876e4..0b4dd7a 100644 --- a/ElectronNET.Host/api/powerMonitor.js +++ b/ElectronNET.Host/api/powerMonitor.js @@ -13,5 +13,30 @@ module.exports = (socket) => { electronSocket.emit('pm-unlock-screen'); }); }); + socket.on('register-pm-suspend', () => { + electron_1.powerMonitor.on('suspend', () => { + electronSocket.emit('pm-suspend'); + }); + }); + socket.on('register-pm-resume', () => { + electron_1.powerMonitor.on('resume', () => { + electronSocket.emit('pm-resume'); + }); + }); + socket.on('register-pm-on-ac', () => { + electron_1.powerMonitor.on('on-ac', () => { + electronSocket.emit('pm-on-ac'); + }); + }); + socket.on('register-pm-on-battery', () => { + electron_1.powerMonitor.on('on-battery', () => { + electronSocket.emit('pm-on-battery'); + }); + }); + socket.on('register-pm-shutdown', () => { + electron_1.powerMonitor.on('shutdown', () => { + electronSocket.emit('pm-shutdown'); + }); + }); }; //# sourceMappingURL=powerMonitor.js.map \ No newline at end of file diff --git a/ElectronNET.Host/api/powerMonitor.js.map b/ElectronNET.Host/api/powerMonitor.js.map index 35ffbfd..51c5763 100644 --- a/ElectronNET.Host/api/powerMonitor.js.map +++ b/ElectronNET.Host/api/powerMonitor.js.map @@ -1 +1 @@ -{"version":3,"file":"powerMonitor.js","sourceRoot":"","sources":["powerMonitor.ts"],"names":[],"mappings":";AAAA,uCAAwC;AACxC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAuB,EAAE,EAAE;IACjC,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,uBAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,uBAAY,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"powerMonitor.js","sourceRoot":"","sources":["powerMonitor.ts"],"names":[],"mappings":";AAAA,uCAAwC;AACxC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAuB,EAAE,EAAE;IACjC,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,uBAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,uBAAY,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAClC,uBAAY,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACjC,uBAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAChC,uBAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACrC,uBAAY,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACnC,uBAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7B,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/ElectronNET.Host/api/powerMonitor.ts b/ElectronNET.Host/api/powerMonitor.ts index f630a0a..30b42df 100644 --- a/ElectronNET.Host/api/powerMonitor.ts +++ b/ElectronNET.Host/api/powerMonitor.ts @@ -13,4 +13,29 @@ export = (socket: SocketIO.Socket) => { electronSocket.emit('pm-unlock-screen'); }); }); + socket.on('register-pm-suspend', () => { + powerMonitor.on('suspend', () => { + electronSocket.emit('pm-suspend'); + }); + }); + socket.on('register-pm-resume', () => { + powerMonitor.on('resume', () => { + electronSocket.emit('pm-resume'); + }); + }); + socket.on('register-pm-on-ac', () => { + powerMonitor.on('on-ac', () => { + electronSocket.emit('pm-on-ac'); + }); + }); + socket.on('register-pm-on-battery', () => { + powerMonitor.on('on-battery', () => { + electronSocket.emit('pm-on-battery'); + }); + }); + socket.on('register-pm-shutdown', () => { + powerMonitor.on('shutdown', () => { + electronSocket.emit('pm-shutdown'); + }); + }); }; diff --git a/ElectronNET.Host/package-lock.json b/ElectronNET.Host/package-lock.json index 8fbff34..d4e4a72 100644 --- a/ElectronNET.Host/package-lock.json +++ b/ElectronNET.Host/package-lock.json @@ -89,9 +89,9 @@ } }, "@electron/get": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.10.0.tgz", - "integrity": "sha512-hlueNXU51c3CwQjBw/i5fwt+VfQgSQVUTdicpCHkhEjNZaa4CXJ5W1GaxSwtLE2dvRmAHjpIjUMHTqJ53uojfg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.2.tgz", + "integrity": "sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg==", "dev": true, "requires": { "debug": "^4.1.1", @@ -440,9 +440,9 @@ "dev": true }, "electron": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-8.2.3.tgz", - "integrity": "sha512-FJUp103c8yJBoAaj/QM/OBde57iJh95u1yGJBytMUXmLFSsx78LmNE03QN4XCODyzi76IEcasvUcK6scogRLbQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-8.3.0.tgz", + "integrity": "sha512-XRjiIJICZCgUr2vKSUI2PTkfP0gPFqCtqJUaTJSfCTuE3nTrxBKOUNeRMuCzEqspKkpFQU3SB3MdbMSHmZARlQ==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -451,9 +451,9 @@ }, "dependencies": { "@types/node": { - "version": "12.12.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.36.tgz", - "integrity": "sha512-hmmypvyO/uTLFYCYu6Hlb3ydeJ11vXRxg8/WJ0E3wvwmPO0y47VqnfmXFVuWlysO0Zyj+je1Y33rQeuYkZ51GQ==", + "version": "12.12.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.39.tgz", + "integrity": "sha512-pADGfwnDkr6zagDwEiCVE4yQrv7XDkoeVa4OfA9Ju/zRTk6YNDLGtQbkdL4/56mCQQCs4AhNrBIag6jrp7ZuOg==", "dev": true } } diff --git a/ElectronNET.Host/package.json b/ElectronNET.Host/package.json index afb0e80..b5b2b73 100644 --- a/ElectronNET.Host/package.json +++ b/ElectronNET.Host/package.json @@ -21,7 +21,7 @@ "devDependencies": { "@types/node": "^10.14.4", "@types/socket.io": "^2.1.2", - "electron": "^8.2.3", + "electron": "^8.3.0", "tslint": "^6.1.1", "typescript": "^3.8.3" } diff --git a/ElectronNET.WebApp/Controllers/HomeController.cs b/ElectronNET.WebApp/Controllers/HomeController.cs index 92a0441..e944fcd 100644 --- a/ElectronNET.WebApp/Controllers/HomeController.cs +++ b/ElectronNET.WebApp/Controllers/HomeController.cs @@ -19,6 +19,27 @@ namespace ElectronNET.WebApp.Controllers { Console.WriteLine("Screen unlocked detected from C# "); }; + + Electron.PowerMonitor.OnSuspend += () => + { + Console.WriteLine("The system is going to sleep"); + }; + + Electron.PowerMonitor.OnResume += () => + { + Console.WriteLine("The system is resuming"); + }; + + Electron.PowerMonitor.OnAC += () => + { + Console.WriteLine("The system changes to AC power"); + }; + + Electron.PowerMonitor.OnBattery += () => + { + Console.WriteLine("The system about to reboot or shut down."); + }; + } return View();