github.com/mysteriumnetwork/node@v0.0.0-20240516044423-365054f76801/sleep/sleep_darwin.go (about) 1 //go:build !ios 2 3 /* 4 * Copyright (C) 2020 The "MysteriumNetwork/node" Authors. 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package sleep 21 22 // #cgo LDFLAGS: -framework CoreFoundation -framework IOKit 23 // void NotifyWake(); 24 // void NotifySleep(); 25 // #include "darwin.h" 26 import "C" 27 28 import ( 29 "github.com/rs/zerolog/log" 30 ) 31 32 // Start starts events notifier 33 func (n *Notifier) Start() { 34 log.Debug().Msg("Register for sleep events") 35 36 go C.registerNotifications() 37 38 for { 39 select { 40 case e := <-eventChannel: 41 n.eventBus.Publish(AppTopicSleepNotification, e) 42 case <-n.stop: 43 break 44 } 45 } 46 } 47 48 // Stop stops events notifier 49 func (n *Notifier) Stop() { 50 n.stopOnce.Do(func() { 51 log.Debug().Msg("Unregister sleep events") 52 C.unregisterNotifications() 53 close(n.stop) 54 }) 55 }