component control switches
This commit is contained in:
parent
62e80e9ca7
commit
cb59b8abbd
|
@ -218,10 +218,12 @@ class Main:
|
||||||
sys.exit()
|
sys.exit()
|
||||||
elif opt in ("-d", "--daemon"):
|
elif opt in ("-d", "--daemon"):
|
||||||
daemon = True
|
daemon = True
|
||||||
|
state.enableGUI = False # run without a UI
|
||||||
elif opt in ("-c", "--curses"):
|
elif opt in ("-c", "--curses"):
|
||||||
state.curses = True
|
state.curses = True
|
||||||
elif opt in ("-t", "--test"):
|
elif opt in ("-t", "--test"):
|
||||||
state.testmode = daemon = True
|
state.testmode = daemon = True
|
||||||
|
state.enableGUI = False # run without a UI
|
||||||
|
|
||||||
# is the application already running? If yes then exit.
|
# is the application already running? If yes then exit.
|
||||||
shared.thisapp = singleinstance("", daemon)
|
shared.thisapp = singleinstance("", daemon)
|
||||||
|
@ -241,6 +243,10 @@ class Main:
|
||||||
state.dandelion = 0
|
state.dandelion = 0
|
||||||
|
|
||||||
helper_bootstrap.knownNodes()
|
helper_bootstrap.knownNodes()
|
||||||
|
|
||||||
|
# Not needed if objproc is disabled
|
||||||
|
if state.enableObjProc:
|
||||||
|
|
||||||
# Start the address generation thread
|
# Start the address generation thread
|
||||||
addressGeneratorThread = addressGenerator()
|
addressGeneratorThread = addressGenerator()
|
||||||
addressGeneratorThread.daemon = True # close the main program even if there are threads left
|
addressGeneratorThread.daemon = True # close the main program even if there are threads left
|
||||||
|
@ -259,6 +265,9 @@ class Main:
|
||||||
Inventory() # init
|
Inventory() # init
|
||||||
Dandelion() # init, needs to be early because other thread may access it early
|
Dandelion() # init, needs to be early because other thread may access it early
|
||||||
|
|
||||||
|
# Enable object processor and SMTP only if objproc enabled
|
||||||
|
if state.enableObjProc:
|
||||||
|
|
||||||
# SMTP delivery thread
|
# SMTP delivery thread
|
||||||
if daemon and BMConfigParser().safeGet("bitmessagesettings", "smtpdeliver", '') != '':
|
if daemon and BMConfigParser().safeGet("bitmessagesettings", "smtpdeliver", '') != '':
|
||||||
smtpDeliveryThread = smtpDeliver()
|
smtpDeliveryThread = smtpDeliver()
|
||||||
|
@ -279,9 +288,12 @@ class Main:
|
||||||
singleCleanerThread.daemon = True # close the main program even if there are threads left
|
singleCleanerThread.daemon = True # close the main program even if there are threads left
|
||||||
singleCleanerThread.start()
|
singleCleanerThread.start()
|
||||||
|
|
||||||
|
# Not needed if objproc disabled
|
||||||
|
if state.enableObjProc:
|
||||||
shared.reloadMyAddressHashes()
|
shared.reloadMyAddressHashes()
|
||||||
shared.reloadBroadcastSendersForWhichImWatching()
|
shared.reloadBroadcastSendersForWhichImWatching()
|
||||||
|
|
||||||
|
# API is also objproc dependent
|
||||||
if BMConfigParser().safeGetBoolean('bitmessagesettings', 'apienabled'):
|
if BMConfigParser().safeGetBoolean('bitmessagesettings', 'apienabled'):
|
||||||
try:
|
try:
|
||||||
apiNotifyPath = BMConfigParser().get(
|
apiNotifyPath = BMConfigParser().get(
|
||||||
|
@ -297,6 +309,8 @@ class Main:
|
||||||
singleAPIThread.daemon = True # close the main program even if there are threads left
|
singleAPIThread.daemon = True # close the main program even if there are threads left
|
||||||
singleAPIThread.start()
|
singleAPIThread.start()
|
||||||
|
|
||||||
|
# start network components if networking is enabled
|
||||||
|
if state.enableNetwork:
|
||||||
BMConnectionPool()
|
BMConnectionPool()
|
||||||
asyncoreThread = BMNetworkThread()
|
asyncoreThread = BMNetworkThread()
|
||||||
asyncoreThread.daemon = True
|
asyncoreThread.daemon = True
|
||||||
|
@ -324,8 +338,11 @@ class Main:
|
||||||
import upnp
|
import upnp
|
||||||
upnpThread = upnp.uPnPThread()
|
upnpThread = upnp.uPnPThread()
|
||||||
upnpThread.start()
|
upnpThread.start()
|
||||||
|
else:
|
||||||
|
# Populate with hardcoded value (same as connectToStream above)
|
||||||
|
state.streamsInWhichIAmParticipating.append(1)
|
||||||
|
|
||||||
if daemon == False and BMConfigParser().safeGetBoolean('bitmessagesettings', 'daemon') == False:
|
if daemon == False or state.enableGUI: # FIXME redundant?
|
||||||
if state.curses == False:
|
if state.curses == False:
|
||||||
if not depends.check_pyqt():
|
if not depends.check_pyqt():
|
||||||
sys.exit(
|
sys.exit(
|
||||||
|
|
|
@ -65,7 +65,7 @@ class singleCleaner(threading.Thread, StoppableThread):
|
||||||
# If we are running as a daemon then we are going to fill up the UI
|
# If we are running as a daemon then we are going to fill up the UI
|
||||||
# queue which will never be handled by a UI. We should clear it to
|
# queue which will never be handled by a UI. We should clear it to
|
||||||
# save memory.
|
# save memory.
|
||||||
if shared.thisapp.daemon:
|
if shared.thisapp.daemon or not state.enableGUI: # FIXME redundant?
|
||||||
queues.UISignalQueue.queue.clear()
|
queues.UISignalQueue.queue.clear()
|
||||||
if timeWeLastClearedInventoryAndPubkeysTables < int(time.time()) - 7380:
|
if timeWeLastClearedInventoryAndPubkeysTables < int(time.time()) - 7380:
|
||||||
timeWeLastClearedInventoryAndPubkeysTables = int(time.time())
|
timeWeLastClearedInventoryAndPubkeysTables = int(time.time())
|
||||||
|
@ -120,7 +120,7 @@ class singleCleaner(threading.Thread, StoppableThread):
|
||||||
if "Errno 28" in str(err):
|
if "Errno 28" in str(err):
|
||||||
logger.fatal('(while receiveDataThread knownnodes.needToWriteKnownNodesToDisk) Alert: Your disk or data storage volume is full. ')
|
logger.fatal('(while receiveDataThread knownnodes.needToWriteKnownNodesToDisk) Alert: Your disk or data storage volume is full. ')
|
||||||
queues.UISignalQueue.put(('alert', (tr._translate("MainWindow", "Disk full"), tr._translate("MainWindow", 'Alert: Your disk or data storage volume is full. Bitmessage will now exit.'), True)))
|
queues.UISignalQueue.put(('alert', (tr._translate("MainWindow", "Disk full"), tr._translate("MainWindow", 'Alert: Your disk or data storage volume is full. Bitmessage will now exit.'), True)))
|
||||||
if shared.thisapp.daemon:
|
if shared.thisapp.daemon or not state.enableGUI: # FIXME redundant?
|
||||||
os._exit(0)
|
os._exit(0)
|
||||||
shared.needToWriteKnownNodesToDisk = False
|
shared.needToWriteKnownNodesToDisk = False
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import threading
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
import shared
|
import shared
|
||||||
|
import state
|
||||||
from debug import logger
|
from debug import logger
|
||||||
import queues
|
import queues
|
||||||
import shutdown
|
import shutdown
|
||||||
|
@ -66,7 +67,7 @@ def signal_handler(signal, frame):
|
||||||
"PyBitmessage", "MainThread"):
|
"PyBitmessage", "MainThread"):
|
||||||
return
|
return
|
||||||
logger.error("Got signal %i", signal)
|
logger.error("Got signal %i", signal)
|
||||||
if shared.thisapp.daemon:
|
if shared.thisapp.daemon or not state.enableGUI: # FIXME redundant?
|
||||||
shutdown.doCleanShutdown()
|
shutdown.doCleanShutdown()
|
||||||
else:
|
else:
|
||||||
allThreadTraceback(frame)
|
allThreadTraceback(frame)
|
||||||
|
|
|
@ -61,7 +61,7 @@ def doCleanShutdown():
|
||||||
except Queue.Empty:
|
except Queue.Empty:
|
||||||
break
|
break
|
||||||
|
|
||||||
if shared.thisapp.daemon:
|
if shared.thisapp.daemon or not state.enableGUI: # FIXME redundant?
|
||||||
logger.info('Clean shutdown complete.')
|
logger.info('Clean shutdown complete.')
|
||||||
shared.thisapp.cleanup()
|
shared.thisapp.cleanup()
|
||||||
os._exit(0)
|
os._exit(0)
|
||||||
|
|
|
@ -17,6 +17,14 @@ appdata = '' #holds the location of the application data storage directory
|
||||||
|
|
||||||
shutdown = 0 #Set to 1 by the doCleanShutdown function. Used to tell the proof of work worker threads to exit.
|
shutdown = 0 #Set to 1 by the doCleanShutdown function. Used to tell the proof of work worker threads to exit.
|
||||||
|
|
||||||
|
|
||||||
|
# Component control flags - set on startup, do not change during runtime
|
||||||
|
# The defaults are for standalone GUI (default operating mode)
|
||||||
|
enableNetwork = True # enable network threads
|
||||||
|
enableObjProc = True # enable object processing threads
|
||||||
|
enableAPI = True # enable API (if configured)
|
||||||
|
enableGUI = True # enable GUI (QT or ncurses)
|
||||||
|
enableSTDIO = False # enable STDIO threads
|
||||||
curses = False
|
curses = False
|
||||||
|
|
||||||
sqlReady = False # set to true by sqlTread when ready for processing
|
sqlReady = False # set to true by sqlTread when ready for processing
|
||||||
|
|
Reference in New Issue
Block a user