feat: adding exception and and logger handler
This commit is contained in:
parent
43e7fcca30
commit
9fd0caad19
|
|
@ -17,18 +17,24 @@ class SocketController:
|
||||||
def _register_events(self):
|
def _register_events(self):
|
||||||
@self.socketio.on("connect")
|
@self.socketio.on("connect")
|
||||||
def on_connect():
|
def on_connect():
|
||||||
# print(f"Client connected: {request.sid}")
|
try:
|
||||||
current_app.logger.info(f"Client connected: {request.sid}")
|
current_app.logger.info(f"Client connected: {request.sid}")
|
||||||
emit("connection_response", {"status": "connected", "sid": request.sid})
|
emit("connection_response", {"status": "connected", "sid": request.sid})
|
||||||
|
except Exception as e:
|
||||||
|
emit("error", {"message": f"Connect error: {str(e)}"})
|
||||||
|
current_app.logger.error(f"Connect error: {str(e)}")
|
||||||
|
|
||||||
@self.socketio.on("disconnect")
|
@self.socketio.on("disconnect")
|
||||||
def on_disconnect():
|
def on_disconnect():
|
||||||
current_app.logger.info(f"Client connected: {request.sid}")
|
try:
|
||||||
# print(f"Client disconnected: {request.sid}")
|
current_app.logger.info(f"Client disconnected: {request.sid}")
|
||||||
pass
|
except Exception as e:
|
||||||
|
emit("error", {"message": f"Disconnect error: {str(e)}"})
|
||||||
|
current_app.logger.error(f"error: {str(e)}")
|
||||||
|
|
||||||
@self.socketio.on("join_room")
|
@self.socketio.on("join_room")
|
||||||
def handle_join_room(data):
|
def handle_join_room(data):
|
||||||
|
try:
|
||||||
session_code = data.get("session_code")
|
session_code = data.get("session_code")
|
||||||
user_id = data.get("user_id")
|
user_id = data.get("user_id")
|
||||||
|
|
||||||
|
|
@ -36,23 +42,22 @@ class SocketController:
|
||||||
emit("error", {"message": "session_code and user_id are required"})
|
emit("error", {"message": "session_code and user_id are required"})
|
||||||
return
|
return
|
||||||
|
|
||||||
session = self.session_service.join_session(
|
session = self.session_service.join_session(session_code, user_id)
|
||||||
session_code=session_code,
|
|
||||||
user_id=user_id,
|
|
||||||
)
|
|
||||||
|
|
||||||
if session is None:
|
if session is None:
|
||||||
emit("error", {"message": "Failed to join session or session inactive"})
|
emit(
|
||||||
|
"error",
|
||||||
|
{"message": "Failed to join session or session inactive"},
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
session_id = session["session_id"]
|
session_id = session["session_id"]
|
||||||
|
|
||||||
join_room(session_id)
|
join_room(session_id)
|
||||||
|
|
||||||
if session["is_admin"]:
|
message = (
|
||||||
message = "Admin has joined the room."
|
"Admin has joined the room."
|
||||||
else:
|
if session["is_admin"]
|
||||||
message = f"User {session['username']} has joined the room."
|
else f"User {session['username']} has joined the room."
|
||||||
|
)
|
||||||
|
|
||||||
current_app.logger.info(f"Client joined: {message}")
|
current_app.logger.info(f"Client joined: {message}")
|
||||||
emit(
|
emit(
|
||||||
|
|
@ -85,17 +90,20 @@ class SocketController:
|
||||||
skip_sid=request.sid,
|
skip_sid=request.sid,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
emit("error", {"message": f"Join room error: {str(e)}"})
|
||||||
|
current_app.logger.error(f"error: {str(e)}")
|
||||||
|
|
||||||
@self.socketio.on("leave_room")
|
@self.socketio.on("leave_room")
|
||||||
def handle_leave_room(data):
|
def handle_leave_room(data):
|
||||||
|
try:
|
||||||
session_id = data.get("session_id")
|
session_id = data.get("session_id")
|
||||||
user_id = data.get("user_id")
|
user_id = data.get("user_id")
|
||||||
username = data.get("username", "anonymous")
|
username = data.get("username", "anonymous")
|
||||||
|
|
||||||
leave_result = self.session_service.leave_session(
|
leave_result = self.session_service.leave_session(session_id, user_id)
|
||||||
session_id=session_id,
|
|
||||||
user_id=user_id,
|
|
||||||
)
|
|
||||||
leave_room(session_id)
|
leave_room(session_id)
|
||||||
|
|
||||||
if leave_result["is_success"]:
|
if leave_result["is_success"]:
|
||||||
emit(
|
emit(
|
||||||
"room_message",
|
"room_message",
|
||||||
|
|
@ -111,6 +119,7 @@ class SocketController:
|
||||||
room=session_id,
|
room=session_id,
|
||||||
skip_sid=request.sid,
|
skip_sid=request.sid,
|
||||||
)
|
)
|
||||||
|
|
||||||
emit(
|
emit(
|
||||||
"room_message",
|
"room_message",
|
||||||
{
|
{
|
||||||
|
|
@ -124,29 +133,39 @@ class SocketController:
|
||||||
to=request.sid,
|
to=request.sid,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
emit("error", {"message": f"Leave room error: {str(e)}"})
|
||||||
|
current_app.logger.error(f"error: {str(e)}")
|
||||||
|
|
||||||
@self.socketio.on("send_message")
|
@self.socketio.on("send_message")
|
||||||
def on_send_message(data):
|
def on_send_message(data):
|
||||||
|
try:
|
||||||
session_code = data.get("session_id")
|
session_code = data.get("session_id")
|
||||||
message = data.get("message")
|
message = data.get("message")
|
||||||
username = data.get("username", "anonymous")
|
username = data.get("username", "anonymous")
|
||||||
|
|
||||||
emit(
|
emit(
|
||||||
"receive_message",
|
"receive_message",
|
||||||
{"message": message, "from": username},
|
{"message": message, "from": username},
|
||||||
room=session_code,
|
room=session_code,
|
||||||
)
|
)
|
||||||
|
except Exception as e:
|
||||||
|
emit("error", {"message": f"Send message error: {str(e)}"})
|
||||||
|
current_app.logger.error(f"error: {str(e)}")
|
||||||
|
|
||||||
@self.socketio.on("end_session")
|
@self.socketio.on("end_session")
|
||||||
def handle_end_session(data):
|
def handle_end_session(data):
|
||||||
|
try:
|
||||||
session_code = data.get("session_id")
|
session_code = data.get("session_id")
|
||||||
user_id = data.get("user_id")
|
user_id = data.get("user_id")
|
||||||
if not session_code or not user_id:
|
if not session_code or not user_id:
|
||||||
emit("error", {"message": "session_id and user_id required"})
|
emit("error", {"message": "session_id and user_id required"})
|
||||||
return
|
return
|
||||||
|
|
||||||
# Validasi user berhak mengakhiri session
|
self.session_service.end_session(
|
||||||
self.session_service.end_session(session_id=session_code, user_id=user_id)
|
session_id=session_code, user_id=user_id
|
||||||
|
)
|
||||||
|
|
||||||
# Bersihkan semua data session di Redis
|
|
||||||
for key in [
|
for key in [
|
||||||
self._answers_key(session_code),
|
self._answers_key(session_code),
|
||||||
self._scores_key(session_code),
|
self._scores_key(session_code),
|
||||||
|
|
@ -159,9 +178,13 @@ class SocketController:
|
||||||
{"message": "Session has ended.", "room": session_code},
|
{"message": "Session has ended.", "room": session_code},
|
||||||
room=session_code,
|
room=session_code,
|
||||||
)
|
)
|
||||||
|
except Exception as e:
|
||||||
|
emit("error", {"message": f"End session error: {str(e)}"})
|
||||||
|
current_app.logger.error(f"error: {str(e)}")
|
||||||
|
|
||||||
@self.socketio.on("start_quiz")
|
@self.socketio.on("start_quiz")
|
||||||
def handle_start_quiz(data):
|
def handle_start_quiz(data):
|
||||||
|
try:
|
||||||
session_id = data.get("session_id")
|
session_id = data.get("session_id")
|
||||||
if not session_id:
|
if not session_id:
|
||||||
emit("error", {"message": "session_id is required"})
|
emit("error", {"message": "session_id is required"})
|
||||||
|
|
@ -173,9 +196,13 @@ class SocketController:
|
||||||
args=(session_id, self.socketio),
|
args=(session_id, self.socketio),
|
||||||
daemon=True,
|
daemon=True,
|
||||||
).start()
|
).start()
|
||||||
|
except Exception as e:
|
||||||
|
emit("error", {"message": f"Start quiz error: {str(e)}"})
|
||||||
|
current_app.logger.error(f"error: {str(e)}")
|
||||||
|
|
||||||
@self.socketio.on("submit_answer")
|
@self.socketio.on("submit_answer")
|
||||||
def handle_submit_answer(data):
|
def handle_submit_answer(data):
|
||||||
|
try:
|
||||||
session_id = data.get("session_id")
|
session_id = data.get("session_id")
|
||||||
user_id = data.get("user_id")
|
user_id = data.get("user_id")
|
||||||
question_index = data.get("question_index")
|
question_index = data.get("question_index")
|
||||||
|
|
@ -199,7 +226,6 @@ class SocketController:
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
|
||||||
result = self.session_service.submit_answer(
|
result = self.session_service.submit_answer(
|
||||||
session_id=session_id,
|
session_id=session_id,
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
|
|
@ -207,9 +233,6 @@ class SocketController:
|
||||||
answer=user_answer,
|
answer=user_answer,
|
||||||
time_spent=time_spent,
|
time_spent=time_spent,
|
||||||
)
|
)
|
||||||
except ValueError as exc:
|
|
||||||
emit("error", {"message": str(exc)})
|
|
||||||
return
|
|
||||||
|
|
||||||
emit(
|
emit(
|
||||||
"answer_submitted",
|
"answer_submitted",
|
||||||
|
|
@ -229,3 +252,10 @@ class SocketController:
|
||||||
},
|
},
|
||||||
room=session_id,
|
room=session_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
except ValueError as exc:
|
||||||
|
emit("error", {"message": str(exc)})
|
||||||
|
current_app.logger.error(f"error: {str(exc)}")
|
||||||
|
except Exception as e:
|
||||||
|
emit("error", {"message": f"Submit answer error: {str(e)}"})
|
||||||
|
current_app.logger.error(f"error: {str(e)}")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue