Files
luserver/runtime/__main__.py
lcdr d95003e1eb v2017.09.07
- added auth disabled message
- added rules command
- added welcome message
- implemented command permission check
- implemented support for older lvl format
- fixed spawning in void
2017-09-06 16:02:05 +02:00

83 lines
2.5 KiB
Python

import asyncio
import logging
import os
import subprocess
import sys
import time
import toml
import ZEO
from luserver.auth import AuthServer
from luserver.world import WorldServer
with open(os.path.normpath(os.path.join(__file__, "..", "instance.toml"))) as file:
config = toml.load(file)
logging.basicConfig(format="%(levelname).1s:%(message)s", level=logging.DEBUG)
try:
import colorlog
except ImportError:
pass
else:
handler = colorlog.StreamHandler()
handler.setFormatter(colorlog.ColoredFormatter("%(log_color)s%(levelname).1s:%(message)s"))
logger = logging.getLogger()
logger.handlers[0] = handler
if len(sys.argv) == 1:
instance_id = "auth"
else:
instance_id = sys.argv[1]+" "+sys.argv[2]
log_path = os.path.normpath(os.path.join(__file__, "..", "logs", "luserver %s.log" % instance_id))
file_handler = logging.FileHandler(log_path)
file_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s: %(message)s"))
logging.getLogger().addHandler(file_handler)
#logging.getLogger().handlers[0].addFilter(logging.Filter("luserver"))
logging.getLogger("ZEO").setLevel(logging.WARNING)
logging.getLogger("txn").setLevel(logging.WARNING)
logging.getLogger("luserver.components.skill").setLevel(logging.INFO)
log = logging.getLogger(__file__)
while True:
try:
conn = ZEO.connection(12345, wait_timeout=3)
break
except ZEO.Exceptions.ClientDisconnected:
if os.name == "nt":
flags = subprocess.CREATE_NEW_CONSOLE
else:
flags = 0
subprocess.Popen("runzeo -a 12345 -f "+os.path.normpath(os.path.join(__file__, "..", "db", "server_db.db")), shell=True, creationflags=flags)
time.sleep(3)
if len(sys.argv) == 1:
AuthServer(config["connection"]["internal_host"], max_connections=8, db_conn=conn)
else:
world_id = int(sys.argv[1]), int(sys.argv[2])
if len(sys.argv) == 4:
port = int(sys.argv[3])
else:
if config["connection"]["port_range"]:
range_start, range_stop = config["connection"]["port_range"]
for port in range(range_start, range_stop):
if (config["connection"]["external_host"], port) not in conn.root.servers:
log.info("Using port %i", port)
break
else:
log.error("No open port left!")
sys.exit()
else:
port = 0
WorldServer((config["connection"]["internal_host"], port), config["connection"]["external_host"], world_id, max_connections=8, db_conn=conn)
loop = asyncio.get_event_loop()
loop.run_forever()
loop.close()