upload
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env python3
|
||||
# =======================================================================
|
||||
#
|
||||
# Copyright (C) 2018, Hisilicon Technologies Co., Ltd. All Rights Reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1 Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2 Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3 Neither the names of the copyright holders nor the names of the
|
||||
# contributors may be used to endorse or promote products derived from this
|
||||
# software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
# =======================================================================
|
||||
#
|
||||
|
||||
"""presenter server module"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import signal
|
||||
import argparse
|
||||
import logging
|
||||
|
||||
WEB_SERVER = None
|
||||
APP_SERVER = None
|
||||
RUN_SERVER = None
|
||||
SERVER_TYPE = ""
|
||||
USAGE_INFO = "python3 prensenter_server.py [-h] --app \n\t\t\t\t{body_pose}"
|
||||
|
||||
BODY_MAP = {"web_server": "body_pose.src.web",
|
||||
"app_server": "body_pose.src.body_pose_server"
|
||||
}
|
||||
|
||||
APP_CONF_MAP = {"body_pose": BODY_MAP}
|
||||
|
||||
|
||||
def arg_parse():
|
||||
'''arg_parse'''
|
||||
global WEB_SERVER
|
||||
global APP_SERVER
|
||||
global SERVER_TYPE
|
||||
|
||||
parser = argparse.ArgumentParser(usage=USAGE_INFO)
|
||||
parser.add_argument('--app', type=str, required=True,
|
||||
choices=['body_pose'],
|
||||
help="Application type corresponding to Presenter Server.")
|
||||
args = parser.parse_args()
|
||||
SERVER_TYPE = args.app
|
||||
app_conf = APP_CONF_MAP.get(SERVER_TYPE)
|
||||
|
||||
WEB_SERVER = __import__(app_conf.get("web_server"), fromlist=True)
|
||||
APP_SERVER = __import__(app_conf.get("app_server"), fromlist=True)
|
||||
|
||||
def start_app():
|
||||
global RUN_SERVER
|
||||
# start socket server for presenter agent communication
|
||||
RUN_SERVER = APP_SERVER.run()
|
||||
if RUN_SERVER is None:
|
||||
return False
|
||||
|
||||
logging.info("presenter server starting, type: %s", SERVER_TYPE)
|
||||
# start web ui
|
||||
return WEB_SERVER.start_webapp()
|
||||
|
||||
def stop_app():
|
||||
WEB_SERVER.stop_webapp()
|
||||
RUN_SERVER.stop_thread()
|
||||
|
||||
|
||||
def close_all_thread(signum, frame):
|
||||
'''close all thread of the process, and exit.'''
|
||||
logging.info("receive signal, signum:%s, frame:%s", signum, frame)
|
||||
stop_app()
|
||||
|
||||
logging.info("presenter server exit by Ctrl + c")
|
||||
|
||||
sys.exit()
|
||||
|
||||
def check_server_exist():
|
||||
pid = os.getpid()
|
||||
|
||||
cmd = "ps -ef|grep -v {}|grep -w presenter_server|grep {}" \
|
||||
.format(pid, SERVER_TYPE)
|
||||
|
||||
ret = os.system(cmd)
|
||||
|
||||
return ret
|
||||
|
||||
def main_process():
|
||||
'''Main function entrance'''
|
||||
arg_parse()
|
||||
|
||||
if check_server_exist() == 0:
|
||||
print("Presenter Server type \"%s\" already exist!" %(SERVER_TYPE))
|
||||
return True
|
||||
# process signal, when receive "Ctrl + c" signal,
|
||||
# stop all thead and exit the progress.
|
||||
signal.signal(signal.SIGINT, close_all_thread)
|
||||
signal.signal(signal.SIGTERM, close_all_thread)
|
||||
start_app()
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
main_process()
|
||||
Reference in New Issue
Block a user