add web
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
from app.extensions import redis_controller, db
|
||||
from app.models.place import Place
|
||||
from app.models.placeservers import PlaceServer
|
||||
from app.models.placeserver_players import PlaceServerPlayer
|
||||
from app.models.universe import Universe
|
||||
|
||||
from sqlalchemy import func
|
||||
|
||||
def ClearPlayingCountCache( PlaceObj : Place ):
|
||||
"""
|
||||
Clears the cache for the amount of players playing a place
|
||||
|
||||
:param PlaceObj: The place to clear the cache for
|
||||
|
||||
:returns: None
|
||||
"""
|
||||
redis_controller.delete(f"place:{str(PlaceObj.placeid)}:playercount:placeinfo")
|
||||
redis_controller.delete(f"universe:{str(PlaceObj.parent_universe_id)}:playercount:placeinfo")
|
||||
|
||||
def ClearUniversePlayingCountCache( UniverseObj : Universe ):
|
||||
"""
|
||||
Clears the cache for the amount of players playing in a universe
|
||||
|
||||
:param UniverseObj: The universe to clear the cache for
|
||||
|
||||
:returns: None
|
||||
"""
|
||||
redis_controller.delete(f"universe:{str(UniverseObj.id)}:playercount:placeinfo")
|
||||
|
||||
def GetPlayingCount( PlaceObj : Place, IgnoreCache = False ) -> int:
|
||||
"""
|
||||
Returns the amount of players playing a place
|
||||
|
||||
:param PlaceObj: The place to get the amount of players playing
|
||||
:param IgnoreCache: Whether to ignore the cache or not
|
||||
|
||||
:returns: int (The amount of players playing a place)
|
||||
"""
|
||||
if not IgnoreCache:
|
||||
PlayingCount = redis_controller.get(f"place:{str(PlaceObj.placeid)}:playercount:placeinfo")
|
||||
if PlayingCount is not None:
|
||||
return int(PlayingCount)
|
||||
|
||||
PlayingCount = 0
|
||||
# Check if there even is a place server
|
||||
PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serverPlaceId=PlaceObj.placeid).first()
|
||||
if PlaceServerObj is not None:
|
||||
# Get all place servers with the same placeid
|
||||
PlaceServerObjs = PlaceServer.query.filter_by(serverPlaceId=PlaceObj.placeid).all()
|
||||
for PlaceServerObj in PlaceServerObjs:
|
||||
PlayingCount += PlaceServerObj.playerCount
|
||||
|
||||
redis_controller.set(f"place:{str(PlaceObj.placeid)}:playercount:placeinfo", PlayingCount, ex=60)
|
||||
return PlayingCount
|
||||
|
||||
def GetUniversePlayingCount( UniverseObj : Universe, IgnoreCache : bool = False ) -> int:
|
||||
"""
|
||||
Returns the amount of players playing in a universe
|
||||
|
||||
:param UniverseObj: The universe to get the amount of players playing
|
||||
:param IgnoreCache: Whether to ignore the cache or not
|
||||
|
||||
:returns: int (The amount of players playing in a universe)
|
||||
"""
|
||||
|
||||
if not IgnoreCache:
|
||||
PlayingCount = redis_controller.get(f"universe:{str(UniverseObj.id)}:playercount:placeinfo")
|
||||
if PlayingCount is not None:
|
||||
return int(PlayingCount)
|
||||
|
||||
PlayingCount = PlaceServer.query.join(Place, PlaceServer.serverPlaceId == Place.placeid ).filter(Place.parent_universe_id == UniverseObj.id).all()
|
||||
PlayingCount = sum([PlaceServerObj.playerCount for PlaceServerObj in PlayingCount])
|
||||
redis_controller.set(f"universe:{str(UniverseObj.id)}:playercount:placeinfo", PlayingCount, ex=60)
|
||||
return PlayingCount
|
||||
Reference in New Issue
Block a user