Full completed project
This commit is contained in:
100
server/modules/handler/tasks.py
Normal file
100
server/modules/handler/tasks.py
Normal file
@@ -0,0 +1,100 @@
|
||||
import eventlet
|
||||
from modules.track.logging import log
|
||||
|
||||
from modules.data.database import connect as db_connect
|
||||
from modules.data.config import read as config_read
|
||||
from modules.data.datetime import timestamp
|
||||
from modules.handler import outgoing
|
||||
from modules.user.content import notification
|
||||
from modules.user.info import auth as auth_info
|
||||
|
||||
from modules.start.start import final_startup
|
||||
|
||||
def user_service(sio, sid):
|
||||
user_id = sio.get_session(sid)['id']
|
||||
|
||||
db = db_connect()
|
||||
db.create(None)
|
||||
log("INFO", f"Starting user service for {user_id}")
|
||||
|
||||
while True:
|
||||
eventlet.sleep(30)
|
||||
user_notification_service(db, sio, sid, user_id)
|
||||
|
||||
def user_notification_service(db_con, sio, sid, user_id):
|
||||
notifications = notification(user_id=user_id)
|
||||
notifications.columns = ['notification_id','title', 'content']
|
||||
username = auth_info(user_id=user_id).get()['username']
|
||||
|
||||
notif_queue = notifications.get_unsent()['notifications']
|
||||
if notif_queue:
|
||||
for notif in notif_queue:
|
||||
outgoing.send_notification(sio, notif, sid, username)
|
||||
db_con.cur.execute("UPDATE notifications_sent SET time_sent = ?, sent = ? WHERE user_id = ? AND notification_id = ?", (timestamp().now, True, user_id, notif['notification_id']))
|
||||
db_con.commit()
|
||||
|
||||
def post_time_notification():
|
||||
if timestamp().is_valid_time():
|
||||
log("INFO", "Sending post time notifications")
|
||||
post_time_limit = int(config_read('posts', 'posttimelimit'))
|
||||
title = "post-" + config_read('miscellaneous', 'ServerCode')
|
||||
content = f"you have {post_time_limit} minutes to post"
|
||||
target = "all-" + config_read('miscellaneous', 'ServerCode')
|
||||
# notifications has a sepcial code for sending notifications accross the server
|
||||
# if the target is set to "all-<unique server code>" the entire server is notified
|
||||
|
||||
notification_data = {'title': title, 'content': content, 'target_id': target, "expire_after": post_time_limit*60}
|
||||
notification().create(notification_data)
|
||||
notification_created = True
|
||||
log("INFO", "Sent post time notifications")
|
||||
else:
|
||||
notification_created = False
|
||||
|
||||
return notification_created
|
||||
|
||||
def notification_remove(db_con):
|
||||
db_con.cur.execute("SELECT notification_id, time_created, expire_after FROM notifications")
|
||||
rez = db_con.cur.fetchall()
|
||||
if rez:
|
||||
for notif in rez:
|
||||
if notif[1] + notif[2] < timestamp().now:
|
||||
notification(notification_id=notif[0]).delete()
|
||||
|
||||
def startup_notif():
|
||||
server_code = config_read('miscellaneous', 'servercode')
|
||||
notif_data = {'target_id': "all-"+server_code, 'title': "Server is up", 'content': "The server is now on and functioning", 'expire_after': 180}
|
||||
notification().create(notif_data)
|
||||
|
||||
def server_service(session):
|
||||
db = db_connect()
|
||||
db.create(None)
|
||||
log("INFO", f"Starting server background service")
|
||||
|
||||
while session.mode != "normal":
|
||||
eventlet.sleep(1)
|
||||
log("INFO", "Server mode normal, continuing startup")
|
||||
|
||||
final_startup(session)
|
||||
startup_notif()
|
||||
while True:
|
||||
# keeps the service running forever
|
||||
post_notification = False
|
||||
post_notif_title = "post-" + config_read('miscellaneous','ServerCode')
|
||||
db.cur.execute("SELECT time_created FROM notifications WHERE title=?", (post_notif_title,))
|
||||
rez = db.cur.fetchall()
|
||||
if rez:
|
||||
for notif in rez:
|
||||
if timestamp().start < notif[0] and timestamp().end > notif[0]:
|
||||
post_notification = True
|
||||
|
||||
today_end = timestamp().end
|
||||
|
||||
while timestamp().now < today_end:
|
||||
# keeps running this loop until the end of the day then it returns to the while above on the start of the new day
|
||||
#print(f"now: {timestamp().now}")
|
||||
eventlet.sleep(10)
|
||||
# removes expired notifications
|
||||
notification_remove(db)
|
||||
|
||||
if not post_notification:
|
||||
post_notification = post_time_notification()
|
||||
Reference in New Issue
Block a user