Пример #1
0
def create_app():
    app = Flask(__name__)
    app.register_blueprint(web, url_prefix='/')
    app.register_blueprint(api, url_prefix='/api')

    print('Initializing database...')
    DB.initialize()
    game.initialize()

    global bot_thread
    bot_thread = threading.Thread(target=bot.run)
    bot_thread.start()

    return app
Пример #2
0
def add_task():
    data = request.get_json()
    session = DB.Session()
    user = session.query(User).filter_by(duid=data['user_id']).first()
    if user is not None:
        current_task = session.query(Task).filter_by(duid=data['user_id']).order_by(Task.started.desc()).first()

        if current_task is None:
            try:
                if not 'range_end' in data:
                    data['range_end'] = data['range_start']

                new_task = Task(data['range_start'], data['range_end'], name=data['action'])
                user.tasks.append(new_task)

                session.add(new_task)
                session.commit()
                return '{}, your task has been started! Check back later to see your progress.', 200
            except:
                session.rollback()
                return 'DB error', 500
            session.close()
        else:
            session.close()
            return '{}, you\'re already working on another task! Please wait for it to be completed before adding more work to your queue.', 200
    else:
        session.close()
        return '{}, you don\'t have a farm yet! Type `$start` to begin playing!', 200
Пример #3
0
def register():
    data = request.get_json()
    session = DB.Session()
    user = session.query(User).filter_by(duid=data['user_id']).first()
    if user is None:
        try:
            user = User(
                data['user_id'],
                data['user_name'],
                datetime.utcnow(),
                datetime.utcnow(),
                game_time=datetime.strptime('1975-07-01 06:00:00', '%Y-%m-%d %H:%M:%S')
            )
            farm = Farm()
            user.farms.append(farm)

            session.add(user)
            session.commit()

            return 'Welcome to your :sparkles:**DREAM FARM**:sparkles:, {}!', 200
        except:
            session.rollback()
            return 'DB error', 500
    else:
        return '{}, you\'re already playing!', 200
Пример #4
0
 def __init__(self, name=None):
     if name is not None:
         if name in CropInfo.cache:
             self.info_id = CropInfo.cache[name]
         else:
             session = DB.Session()
             info = session.query(CropInfo).filter_by(name=name).first()
             self.info_id = info.id
             CropInfo.cache[name] = self.info_id
             session.close()
Пример #5
0
def seed_db():
    # Seed the database with game data
    session = DB.Session()

    try:
        tiles = json.load(
            open(os.path.realpath('./dreamfarm/game/data/tiles.json')))
        for name, tile in tiles.items():
            current = session.query(TileInfo).filter_by(name=name).first()
            info = TileInfo(name, tile['texture_x'], tile['texture_y'])
            if current is not None:
                info.id = current.id
            merged = session.merge(info)
            session.add(merged)

        objects = json.load(
            open(os.path.realpath('./dreamfarm/game/data/objects.json')))
        for name, obj in objects.items():
            current = session.query(ObjInfo).filter_by(name=name).first()
            info = ObjInfo(name, obj['required_tool'], obj['texture_x'],
                           obj['texture_y'])
            if current is not None:
                info.id = current.id
            merged = session.merge(info)
            session.add(merged)

        crops = json.load(
            open(os.path.realpath('./dreamfarm/game/data/crops.json')))
        for name, crop in crops.items():
            current = session.query(CropInfo).filter_by(name=name).first()
            info = CropInfo(name, crop['lifespan'], crop['value'],
                            crop['texture_x'], crop['texture_y'])
            if current is not None:
                info.id = current.id
            merged = session.merge(info)
            session.add(merged)

        tasks = json.load(
            open(os.path.realpath('./dreamfarm/game/data/tasks.json')))
        for name, task in tasks.items():
            current = session.query(TaskInfo).filter_by(name=name).first()
            info = TaskInfo(name, task['completion_time'])
            if current is not None:
                info.id = current.id
            merged = session.merge(info)
            session.add(merged)

        session.commit()
    except:
        session.rollback()

    session.close()
Пример #6
0
def do_calculations():
    data = request.get_json()
    session = DB.Session()
    user = session.query(User).filter_by(duid=data['user_id']).first()

    if user is not None:
        report = user.do_calculations()
        session.add(user)
        session.commit()
        return jsonify(report), 200

    session.close()
    return 'User doesn\'t exist', 400
Пример #7
0
    def __init__(self, cell_start, cell_end, name=None):
        if name is not None:
            if name in TaskInfo.cache:
                self.info_id = TaskInfo.cache[name]
            else:
                session = DB.Session()
                info = session.query(TaskInfo).filter_by(name=name).first()
                self.info_id = info.id
                TaskInfo.cache[name] = self.info_id
                session.close()

        self.cell_start = cell_start
        self.cell_end = cell_end
        self.status = TaskStatus.active
        self.started = datetime.utcnow()
Пример #8
0
    def __init__(self, x, y, name=None, crop=None, obj=None):
        self.x = x
        self.y = y
        self.crop = crop
        self.obj = obj

        if name is not None:
            if name in TileInfo.cache:
                self.info_id = TileInfo.cache[name]
            else:
                session = DB.Session()
                info = session.query(TileInfo).filter_by(name=name).first()
                self.info_id = info.id
                TileInfo.cache[name] = self.info_id
                session.close()
Пример #9
0
def get_current_farm():
    user_id = request.args.get('duid')
    etag = request.headers.get('If-None-Match')

    session = DB.Session()

    farm = session.query(Farm).filter_by(duid=user_id).order_by(Farm.id).first()
    if farm is not None:
        if etag is not None:
            if etag.replace('"', '') == str(farm.current_ver):
                return '', 304
        resp = make_response(send_file(farm.render_file(), mimetype='image/png'))
        resp.cache_control.no_cache = True
        resp.cache_control.must_revalidate = True
        resp.cache_control.max_age = 0
        resp.cache_control.public = False
        resp.cache_control.private = True
        resp.set_etag(str(farm.current_ver))
        return resp

    session.close()
    return 'No farm exists for user', 400
Пример #10
0
 def get_by_name(name):
     session = DB.Session()
     obj = session.query(ObjInfo).filter_by(name=name).first()
     session.close()
     return obj