-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
79 lines (59 loc) · 1.95 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import os
import signal
import sys
import time
from concurrent import futures
import grpc
from pbr.version import VersionInfo
from server import backgroundworker
from server import config
from server import log
from server import server_pb2_grpc
from server.character import CharacterManager
from server.session import Session
_v = VersionInfo('main').semantic_version()
__version__ = _v.release_string()
version_info = _v.version_tuple()
class GracefulKiller:
kill_now = False
def __init__(self):
signal.signal(signal.SIGINT, self.exit_gracefully)
signal.signal(signal.SIGTERM, self.exit_gracefully)
def exit_gracefully(self, signum, frame):
self.kill_now = True
def serve():
killer = GracefulKiller()
logger = log.setup_custom_logger("cos301-DND")
if os.getuid() == 0:
sys.exit("Should not be run as root!")
logger.info("Starting...")
logger.info("Version: " + __version__)
if os.environ["ENV"] == "prod":
logger.info("In production environment!")
else:
logger.info("In development environment!")
# Change between development environment and production.
# In production
server = grpc.server(futures.ThreadPoolExecutor(max_workers=int(config.val['server']['max_worker_threads'])))
server_pb2_grpc.add_SessionsManagerServicer_to_server(Session(), server)
server_pb2_grpc.add_CharactersManagerServicer_to_server(CharacterManager(), server)
server.add_insecure_port("[::]:50051")
server.start()
# Background daemon
bw = backgroundworker.BackgroundWorker()
bw.start()
logger.info("Started!")
try:
while True:
if killer.kill_now:
logger.info("Received kill, stopping...")
break
time.sleep(1)
except KeyboardInterrupt:
server.stop(0)
logger.info("Stopped!")
finally:
server.stop(0)
logger.info("Stopped!")
if __name__ == "__main__":
serve()