Better startup and shutdown.
This commit is contained in:
parent
a8542b578e
commit
5228cfd279
4 changed files with 54 additions and 9 deletions
|
@ -3,11 +3,22 @@ import time
|
||||||
|
|
||||||
from server import BAPSicleServer
|
from server import BAPSicleServer
|
||||||
|
|
||||||
if __name__ == '__main__':
|
def startServer():
|
||||||
|
|
||||||
# On Windows calling this function is necessary.
|
# On Windows calling this function is necessary.
|
||||||
# Causes all kinds of loops if not present.
|
# Causes all kinds of loops if not present.
|
||||||
multiprocessing.freeze_support()
|
multiprocessing.freeze_support()
|
||||||
server = multiprocessing.Process(target=BAPSicleServer).start()
|
|
||||||
|
server = multiprocessing.Process(target=BAPSicleServer)
|
||||||
|
server.start()
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
time.sleep(1)
|
time.sleep(2)
|
||||||
|
if server and server.is_alive():
|
||||||
pass
|
pass
|
||||||
|
else:
|
||||||
|
print("Server dead. Exiting.")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
startServer()
|
|
@ -10,11 +10,13 @@ import setproctitle
|
||||||
import copy
|
import copy
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
|
||||||
from pygame import mixer
|
from pygame import mixer
|
||||||
from state_manager import StateManager
|
from state_manager import StateManager
|
||||||
from mutagen.mp3 import MP3
|
from mutagen.mp3 import MP3
|
||||||
import os
|
|
||||||
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
|
|
||||||
|
|
||||||
|
|
||||||
class Player():
|
class Player():
|
||||||
|
@ -343,6 +345,7 @@ class Player():
|
||||||
print("Quiting player ", channel)
|
print("Quiting player ", channel)
|
||||||
self.quit()
|
self.quit()
|
||||||
self._retMsg("EXIT")
|
self._retMsg("EXIT")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
def showOutput(in_q, out_q):
|
def showOutput(in_q, out_q):
|
||||||
|
|
30
server.py
30
server.py
|
@ -4,6 +4,8 @@ from flask import Flask, render_template, send_from_directory, request
|
||||||
import json
|
import json
|
||||||
import sounddevice as sd
|
import sounddevice as sd
|
||||||
import setproctitle
|
import setproctitle
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
|
||||||
setproctitle.setproctitle("BAPSicle - Server")
|
setproctitle.setproctitle("BAPSicle - Server")
|
||||||
|
|
||||||
|
@ -18,10 +20,15 @@ class BAPSicleServer():
|
||||||
|
|
||||||
app = Flask(__name__, static_url_path='')
|
app = Flask(__name__, static_url_path='')
|
||||||
|
|
||||||
|
log = logging.getLogger('werkzeug')
|
||||||
|
log.disabled = True
|
||||||
|
app.logger.disabled = True
|
||||||
|
|
||||||
channel_to_q = []
|
channel_to_q = []
|
||||||
channel_from_q = []
|
channel_from_q = []
|
||||||
channel_p = []
|
channel_p = []
|
||||||
|
|
||||||
|
stopping = False
|
||||||
|
|
||||||
@app.errorhandler(404)
|
@app.errorhandler(404)
|
||||||
def page_not_found(e):
|
def page_not_found(e):
|
||||||
|
@ -147,6 +154,11 @@ def status(channel):
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
@app.route("/quit")
|
||||||
|
def quit():
|
||||||
|
stopServer()
|
||||||
|
return "Shutting down..."
|
||||||
|
|
||||||
|
|
||||||
@app.route("/player/all/stop")
|
@app.route("/player/all/stop")
|
||||||
def all_stop():
|
def all_stop():
|
||||||
|
@ -184,9 +196,23 @@ def stopServer():
|
||||||
for q in channel_to_q:
|
for q in channel_to_q:
|
||||||
q.put("QUIT")
|
q.put("QUIT")
|
||||||
for player in channel_p:
|
for player in channel_p:
|
||||||
|
try:
|
||||||
player.join()
|
player.join()
|
||||||
global app
|
except:
|
||||||
app = None
|
pass
|
||||||
|
print ("Stopped all players.")
|
||||||
|
global stopping
|
||||||
|
if stopping == False:
|
||||||
|
stopping = True
|
||||||
|
shutdown = request.environ.get('werkzeug.server.shutdown')
|
||||||
|
if shutdown is None:
|
||||||
|
print("Shutting down Server.")
|
||||||
|
|
||||||
|
else:
|
||||||
|
print("Shutting down Flask.")
|
||||||
|
shutdown()
|
||||||
|
else:
|
||||||
|
print(str(stopping))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -8,6 +8,11 @@ class StateManager:
|
||||||
__state = {}
|
__state = {}
|
||||||
|
|
||||||
def __init__(self, name, default_state=None):
|
def __init__(self, name, default_state=None):
|
||||||
|
try:
|
||||||
|
os.mkdir(resolve_external_file_path("/state"))
|
||||||
|
except FileExistsError:
|
||||||
|
pass
|
||||||
|
|
||||||
self.filepath = resolve_external_file_path("/state/" + name + ".json")
|
self.filepath = resolve_external_file_path("/state/" + name + ".json")
|
||||||
if not os.path.isfile(self.filepath):
|
if not os.path.isfile(self.filepath):
|
||||||
self.log("No file found for " + self.filepath)
|
self.log("No file found for " + self.filepath)
|
||||||
|
|
Loading…
Reference in a new issue