diff --git a/api/controllers/api/v1/quiz_socket_controller.go b/api/controllers/api/v1/quiz_socket_controller.go index df730623..1fc1aaef 100644 --- a/api/controllers/api/v1/quiz_socket_controller.go +++ b/api/controllers/api/v1/quiz_socket_controller.go @@ -727,6 +727,32 @@ func handleConnectedUser(c *websocket.Conn, qc *quizSocketController, sessionId response.Action = constants.ActionSendUserData response.Component = constants.Waiting + users, err := qc.redis.PubSubModel.Client.Get( + qc.redis.PubSubModel.Ctx, + sessionId, + ).Result() + + if err == nil && users != "" { + var usersData []UserInfo + if err := json.Unmarshal([]byte(users), &usersData); err == nil { + + response := QuizSendResponse{ + Component: constants.Waiting, + Action: constants.ActionSendUserData, + Data: usersData, + } + + err = func() error { + arrangeMu.Lock() + defer arrangeMu.Unlock() + return utils.JSONSuccessWs( c, constants.EventSendInvitationCode, response ) + }() + if err != nil { + qc.logger.Error("error while sending initial user data to admin", zap.Error(err)) + } + } + } + pubsub := qc.redis.PubSubModel.Client.Subscribe(qc.redis.PubSubModel.Ctx, fmt.Sprintf("%s-%s", constants.ChannelUserJoin, sessionId), fmt.Sprintf("%s-%s", constants.ChannelUserDisconnect, sessionId), constants.EventTerminateQuiz, constants.EventStartQuizByAdmin, constants.StartQuizByAdminNoPlayerFound) defer func() { if pubsub != nil { diff --git a/app/components/utils/StartQuiz.vue b/app/components/utils/StartQuiz.vue index c3652760..c8e62f6b 100644 --- a/app/components/utils/StartQuiz.vue +++ b/app/components/utils/StartQuiz.vue @@ -49,7 +49,6 @@ const handleStartDemo = async () => { } removeAllUsers(); - setSocketObject(null); router.push(`/admin/arrange/${activeQuizId.value}`); diff --git a/app/composables/admin_operation.js b/app/composables/admin_operation.js index 9a861a09..579e791d 100644 --- a/app/composables/admin_operation.js +++ b/app/composables/admin_operation.js @@ -94,7 +94,6 @@ export default class AdminOperations extends QuizHandler { console.log("stoping ping of admin"); this.stopPing(); super.onClose(event); - setSocketObject(null); } requestPauseQuiz(isPause) { diff --git a/app/composables/quiz_operation.js b/app/composables/quiz_operation.js index b8099891..106ebea5 100644 --- a/app/composables/quiz_operation.js +++ b/app/composables/quiz_operation.js @@ -40,11 +40,9 @@ export default class QuizHandler { this.socket.onclose = (event) => this.onClose(event); this.socket.onmessage = (event) => this.onMessage(event); this.close = (code) => this.socket.close(code); - setSocketObject(this.socket); } continue() { - this.socket = socketObject; this.socket.onopen = (event) => this.onOpen(event); this.socket.onerror = (event) => this.onError(event); this.socket.onclose = (event) => this.onClose(event); diff --git a/app/composables/stored_socket.js b/app/composables/stored_socket.js deleted file mode 100644 index 53230e49..00000000 --- a/app/composables/stored_socket.js +++ /dev/null @@ -1,7 +0,0 @@ -let socketObject = null; - -const setSocketObject = (data) => { - socketObject = data; -}; - -export { socketObject, setSocketObject }; diff --git a/app/pages/admin/arrange/[session_id].vue b/app/pages/admin/arrange/[session_id].vue index dbaf096f..ba442d78 100644 --- a/app/pages/admin/arrange/[session_id].vue +++ b/app/pages/admin/arrange/[session_id].vue @@ -45,7 +45,7 @@ const confirmNeeded = reactive({ const currentComponent = ref("Loading"); const adminOperationHandler = ref(); const analysisTab = ref("ranking"); -const session_id = route.params.session_id; +const session_id = computed(() => route.params.session_id); const runningQuizJoinUser = ref(0); const isPauseQuiz = ref(false); const quizState = computed(() => @@ -62,33 +62,23 @@ const handleCustomChange = (isFullScreenEvent) => { // main functions onMounted(() => { - // core logic - if (process.client) { - try { - if (socketObject) { - adminOperationHandler.value = new AdminOperations( - session_id, - handleQuizEvents, - handleNetworkEvent, - confirmSkip - ); - continueAdmin(); - } else { - adminOperationHandler.value = new AdminOperations( - session_id, - handleQuizEvents, - handleNetworkEvent, - confirmSkip - ); - connectAdmin(); - } - } catch (err) { - console.error(err); - toast.info(app.$ReloadRequired); - } - } + if (!process.client) return; + + removeAllUsers(); + resetUsersSubmittedAnswers(); + currentComponent.value = "Loading"; + + adminOperationHandler.value = new AdminOperations( + session_id.value, + handleQuizEvents, + handleNetworkEvent, + confirmSkip + ); + + connectAdmin(); }); + const handleQuizEvents = async (message) => { if (message.status == app.$Error) { return await router.push(