Ejemplo n.º 1
0
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")
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
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