Onionr/src/communicator/__init__.py

95 lines
3.0 KiB
Python
Raw Normal View History

2020-01-27 08:09:28 +00:00
"""Onionr - Private P2P Communication.
2018-06-10 08:00:01 +00:00
2020-01-27 08:09:28 +00:00
This file contains both the OnionrCommunicate class for
communcating with peers and code to operate as a daemon,
getting commands from the command queue database
"""
import time
import config
import logger
import onionrplugins as plugins
from onionrcommands.openwebinterface import get_url
from . import daemoneventhooks
"""
2021-02-22 07:44:17 +00:00
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
2019-11-16 04:18:38 +00:00
config.reload()
class OnionrCommunicatorDaemon:
def __init__(self, shared_state, developmentMode=None):
if developmentMode is None:
2020-11-19 04:16:37 +00:00
developmentMode = config.get(
'general.dev_mode', False)
# configure logger and stuff
2019-07-20 06:02:30 +00:00
self.config = config
self.shared_state = shared_state # TooManyObjects module
shared_state.add(self)
2018-08-21 20:01:50 +00:00
# populate kv values
self.kv = self.shared_state.get_by_string('DeadSimpleKV')
2019-12-18 10:05:37 +00:00
if config.get('general.offline_mode', False):
2020-07-29 09:32:09 +00:00
self.kv.put('isOnline', False)
2019-12-18 10:05:37 +00:00
self.shared_state.share_object()
# loop time.sleep delay in seconds
2020-12-03 05:20:03 +00:00
self.delay = 5
# amount of threads running by name, used to prevent too many
self.threadCounts = {}
2018-07-06 04:27:12 +00:00
# Loads in and starts the enabled plugins
plugins.reload()
2019-08-04 04:52:57 +00:00
daemoneventhooks.daemon_event_handlers(shared_state)
get_url()
if not config.get('onboarding.done', True):
logger.info(
'First run detected. Run openhome to get setup.',
terminal=True)
while not config.get('onboarding.done', True) and \
not self.shared_state.get_by_string(
'DeadSimpleKV').get('shutdown'):
try:
time.sleep(2)
except KeyboardInterrupt:
self.shared_state.get_by_string(
'DeadSimpleKV').put('shutdown', True)
# Main daemon loop, mainly for calling timers,
# don't do any complex operations here to avoid locking
try:
while not self.shared_state.get_by_string(
'DeadSimpleKV').get('shutdown'):
time.sleep(self.delay)
except KeyboardInterrupt:
self.shared_state.get_by_string(
'DeadSimpleKV').put('shutdown', True)
2018-07-06 04:27:12 +00:00
logger.info(
'Goodbye. (Onionr is cleaning up, and will exit)', terminal=True)
2019-08-04 04:52:57 +00:00
def startCommunicator(shared_state):
OnionrCommunicatorDaemon(shared_state)