def select_json(): try: ujson = __import__('ujson') register('json_decode', ujson.decode) register('json_encode', UJsonEncoder(ujson.encode).encode) info("Selected ujson JSON library") except ImportError: json = __import__('json') register('json_decode', json.JSONDecoder().decode) register('json_encode', json.JSONEncoder().encode) info("Defaulted to standard JSON library")
def __init__(self, port=2500, db_host="localhost", db_port=6379, db_num=0, db_pw=None, flavor='lpflavor', config_id='lampost', server_interface='127.0.0.1', log_level="info", log_file=None): self.properties = {} register('json_decode', JSONDecoder().decode) register('json_encode', JSONEncoder().encode) Log(log_level, log_file) ClassRegistry() Dispatcher() RedisStore(db_host, int(db_port), int(db_num), db_pw) Permissions() SessionManager() UserManager() ConfigManager(config_id) MudNature(flavor) web_server = WebServer(int(port)) context_post_init() web_server.start_service(server_interface)
def __init__(self, db_host="localhost", db_port=6379, db_num=0, db_pw=None, flavor='merc', config_id='lampost', imm_name='root', imm_account='root', imm_password="******", start_area="immortal"): self.properties = {} register('context', self) Log("debug") cls_registry = ClassRegistry() Dispatcher() register('json_decode', JSONDecoder().decode) register('json_encode', JSONEncoder().encode) perm = Permissions() datastore = RedisStore(db_host, int(db_port), int(db_num), db_pw) config = datastore.load_object(Config, config_id) if config: print "Error: This instance is already set up" return room_id = "{0}:0".format(start_area) config = Config(config_id) config.start_room = room_id config.default_colors['shout_channel'] = 0x109010 config.default_colors['imm_channel'] = 0xed1c24 datastore.save_object(config) MudNature(flavor) user_manager = UserManager() player = cls_registry(Player)(imm_name) area = cls_registry(Area)(start_area) area.name = start_area area.owner_id = player.dbo_id area.next_room_id = 1 datastore.save_object(area) room = cls_registry(Room)(room_id) room.title = "Immortal Start Room" room.desc = "A brand new start room for immortals." datastore.save_object(room) area.rooms.append(room) datastore.save_object(area) player.room_id = room_id player.home_room = room_id player.imm_level = perm.perm_level('supreme') datastore.save_object(player) user = user_manager.create_user(imm_account, imm_password) user_manager.attach_player(user, player)
def new_setup(args): resource.register('log', LogFactory()) scripts.select_json() # Initialize the database, flush if requested datastore = resource.register('datastore', RedisStore(args.db_host, args.db_port, args.db_num, args.db_pw), True) if args.flush: db_num = datastore.pool.connection_kwargs['db'] if db_num == args.db_num: warn("Flushing database {}", db_num) datastore.redis.flushdb() else: print("Error: DB Numbers do not match") return db_config = datastore.load_object(args.config_id, 'config') if db_config: print("Error: This instance is already set up") return # Load config yaml files and create the database configuration config_yaml = config.load_yaml(args.config_dir) db_config = dbconfig.create(args.config_id, config_yaml, True) config_values = config.activate(db_config.section_values) # Initialize core services needed by the reset of the setup process resource.register('dispatcher', event, True) perm = resource.register('perm', permissions, True) perm._post_init() app_setup = import_module('{}.setup'.format(args.app_id)) first_player = app_setup.first_time_setup(args, datastore, config_values) user_manager = UserManager() user = user_manager.create_user(args.imm_account, args.imm_password) player = user_manager.attach_player(user, first_player) perm.update_immortal_list(player)
def start_engine(args, config_values, web_server): _update_classes(config_values) resource.register("mud_core", mudcore) resource.register("lpmud_core", lpcore) resource.register("tools", tools, True) web_server.add(r"/client_data/new_char", NewCharacterData)
def start(args): resource.register('log', LogFactory()) scripts.select_json() # Load and activate the database configuration datastore = resource.register('datastore', RedisStore(args.db_host, args.db_port, args.db_num, args.db_pw), True) db_config = datastore.load_object(args.config_id, dbconfig.Config) config_values = config.activate(db_config.section_values) resource.register('dispatcher', event, True) resource.register('perm', permissions, True) web_server = WebServer() app_setup = import_module('{}.setup'.format(args.app_id)) app_setup.start_engine(args, config_values, web_server) resource.register('user_manager', UserManager()) resource.register('session_manager', SessionManager()) resource.register('instance_manager', InstanceManager()) resource.register('email_sender', EmailSender()) resource.register('channel_service', ChannelService()) resource.register('friend_service', FriendService()) resource.register('message_service', MessageService()) resource.register('player_list_service', PlayerListService()) resource.register('login_notify_service', AnyLoginService()) resource.register('edit_notify_service', EditUpdateService(), True) context_post_init() main_router.init(web_server) edit_router.init(web_server) web_server.add(r"/", RedirectHandler, url="/webclient/lampost.html") web_server.add(r"/webclient/(.*)", StaticFileHandler, path="webclient") web_server.start_service(args.port, args.server_interface) IOLoop.instance().start()
from collections import defaultdict from lampost.context import resource from lampost.gameops.action import make_action, convert_verbs, ActionError resource.m_requires(__name__, 'log') _mud_actions = {} resource.register('mud_actions', _mud_actions) imm_actions = set() def mud_action(verbs, msg_class=None, **kwargs): def dec_wrapper(func): action = make_action(func, msg_class=msg_class, **kwargs) for verb in convert_verbs(verbs): if verb in _mud_actions: error("Adding mud action for existing verb {}", verb) else: _mud_actions[verb] = action return dec_wrapper def imm_action(verbs, msg_class=None, imm_level='builder', **kwargs): def dec_wrapper(func): imm_actions.add(func) func.imm_level = imm_level return make_action(func, verbs, msg_class, **kwargs) return dec_wrapper