From 5275f8f0336059d22b88e0f7641883d0f8d11705 Mon Sep 17 00:00:00 2001 From: Kum1ta Date: Wed, 18 Sep 2024 09:22:52 +0200 Subject: [PATCH] Site - websocket try to reconnect when it disconnected - add function on search bar in lobby page for search user Django - add request search user to find someone in database and return a list --- .../server/server/templates/lobbyPage.html | 4 +- .../server/typeRequests/createAccount.py | 4 +- .../server/server/typeRequests/searchUser.py | 30 ++++++++++ .../file/server/server/websocket.py | 13 +++-- .../djangoserver/file/server/test_data.sql | 55 +++++++++++++++++- .../nginx/static/javascript/lobbyPage/main.js | 56 +++++++++++++++---- .../javascript/typeResponse/typeSearchUser.js | 52 +++++++++++++++++ .../nginx/static/javascript/websocket.js | 10 +++- .../static/style/lobbyPage/lobbyPage.css | 34 +++++++++++ 9 files changed, 233 insertions(+), 25 deletions(-) create mode 100644 docker-compose/requirements/djangoserver/file/server/server/typeRequests/searchUser.py create mode 100644 docker-compose/requirements/nginx/static/javascript/typeResponse/typeSearchUser.js diff --git a/docker-compose/requirements/djangoserver/file/server/server/templates/lobbyPage.html b/docker-compose/requirements/djangoserver/file/server/server/templates/lobbyPage.html index 21c5672..873d73e 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/templates/lobbyPage.html +++ b/docker-compose/requirements/djangoserver/file/server/server/templates/lobbyPage.html @@ -1,9 +1,11 @@

PTME

- +
+
+

diff --git a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/createAccount.py b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/createAccount.py index 202c810..34bfb73 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/createAccount.py +++ b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/createAccount.py @@ -6,7 +6,7 @@ # By: edbernar = 10: + break + socket.sync_send({"type":"search_user", "content":userList if userList else []}) + except Exception as e: + socket.sendError("An unknown error occured", 9027, e) + return \ No newline at end of file diff --git a/docker-compose/requirements/djangoserver/file/server/server/websocket.py b/docker-compose/requirements/djangoserver/file/server/server/websocket.py index c870051..51b18a5 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/websocket.py +++ b/docker-compose/requirements/djangoserver/file/server/server/websocket.py @@ -3,10 +3,10 @@ # ::: :::::::: # # websocket.py :+: :+: :+: # # +:+ +:+ +:+ # -# By: tomoron +#+ +:+ +#+ # +# By: edbernar +#+ +:+ +#+ */ +/* By: edbernar usernameP.innerHTML = userMeInfo.username); else usernameP.innerHTML = userMeInfo.username; + inputUser.addEventListener('input', searchUser); loginButton.addEventListener('click', showMenu); window.addEventListener('resize', movePopMenuLoginButton); + window.addEventListener('resize', ajustSearchUserList); movePopMenuLoginButton(); initButtonPopMenuLogin(); + window.addEventListener('click', closePopUpWhenClickOutsite); listSelectCard = document.getElementsByClassName('select-card'); document.getElementsByClassName('game-mode')[0].addEventListener('click', showGameMode); document.getElementById('closePopupBtn').addEventListener('click', hideGameMode); @@ -66,10 +72,12 @@ class LobbyPage { const startButton = document.getElementsByClassName('buttonStartGame')[0]; + window.removeEventListener('click', closePopUpWhenClickOutsite); window.removeEventListener('resize', movePopMenuLoginButton); startButton.removeEventListener('click', startMode); document.getElementsByClassName('game-mode')[0].removeEventListener('click', showGameMode); document.getElementById('closePopupBtn').removeEventListener('click', hideGameMode); + window.removeEventListener('resize', ajustSearchUserList); window.removeEventListener('click', closeClickOutsiteGameMode); listSelectCard[0].removeEventListener('click', selectGameModeOne); listSelectCard[1].removeEventListener('click', selectGameModeTwo); @@ -84,6 +92,33 @@ class LobbyPage } } +function searchUser(event) +{ + const searchResult = document.getElementById('searchResult'); + + if (timeout) + clearTimeout(timeout); + if (event.target.value == '') + searchResult.innerHTML = ''; + else + { + timeout = setTimeout(() => { + sendRequest("search_user", {username: event.target.value}); + }, 300); + } +} + +function ajustSearchUserList() +{ + const searchInputUser = document.getElementById('searchInputUser'); + const pos = searchInputUser.getBoundingClientRect(); + const searchResult = document.getElementById('searchResult'); + + searchResult.style.width = pos.width + 'px'; + searchResult.style.top = pos.top + pos.height + 'px'; + searchResult.style.left = pos.left + 'px'; +} + function startMode() { if (gameMode == 0) @@ -123,14 +158,11 @@ function showGameMode() document.getElementById('loginPopup').style.display = 'flex'; } -// Pour EDDY : Je l'ai fait fonctionné comme ça mais change le comme tu le veux, -// La fonction sert a quitter la login popup si on clique en dehors de la zone. (Efface le commentaire quand tu fais les changements) - -window.addEventListener('click', function(event) { - if (event.target == document.getElementById('loginPopup')) { +function closePopUpWhenClickOutsite (event) +{ + if (event.target == document.getElementById('loginPopup')) document.getElementById('loginPopup').style.display = 'none'; - } -}); +}; function hideGameMode() { diff --git a/docker-compose/requirements/nginx/static/javascript/typeResponse/typeSearchUser.js b/docker-compose/requirements/nginx/static/javascript/typeResponse/typeSearchUser.js new file mode 100644 index 0000000..a5866b8 --- /dev/null +++ b/docker-compose/requirements/nginx/static/javascript/typeResponse/typeSearchUser.js @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* typeSearchUser.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar { + const div = document.createElement('div'); + + div.setAttribute('class', 'searchResultLine'); + div.innerHTML = '

' + user[0] + '

' + '' + searchResult.appendChild(div); + div.addEventListener('click', () => { + console.log("Show profil " + user[0]); + }) + }); +} + +function removeAlluser() +{ + const searchInputUser = document.getElementById('searchInputUser'); + const searchResult = document.getElementById('searchResult'); + + document.body.removeEventListener('click', removeAlluser); + searchResult.innerHTML = ''; + searchInputUser.value = ''; +} + +export { typeSearchUser }; \ No newline at end of file diff --git a/docker-compose/requirements/nginx/static/javascript/websocket.js b/docker-compose/requirements/nginx/static/javascript/websocket.js index 769ba38..59a4655 100644 --- a/docker-compose/requirements/nginx/static/javascript/websocket.js +++ b/docker-compose/requirements/nginx/static/javascript/websocket.js @@ -6,7 +6,7 @@ /* By: edbernar { status = 0; console.log('Disconnected'); + setTimeout(() => { + launchSocket(); + }, 500); }; } diff --git a/docker-compose/requirements/nginx/static/style/lobbyPage/lobbyPage.css b/docker-compose/requirements/nginx/static/style/lobbyPage/lobbyPage.css index faabb00..19c6e4a 100644 --- a/docker-compose/requirements/nginx/static/style/lobbyPage/lobbyPage.css +++ b/docker-compose/requirements/nginx/static/style/lobbyPage/lobbyPage.css @@ -241,6 +241,7 @@ body { border: 2px solid #ccc; font-size: 16px; outline: none; + min-width: 200px; } .search-input:focus { @@ -325,3 +326,36 @@ body { color: white; cursor: pointer; } + +#searchResult { + position: absolute; + display: flex; + flex-direction: column; + background-color: white; + color: black; + z-index: 999; +} + +#searchResult .searchResultLine { + margin-bottom: 5px; + width: 100%; + align-items: center; + cursor: pointer; + display: flex; + flex-direction: row; + justify-content: space-between; +} + +#searchResult .searchResultLine p { + margin-left: 10px; +} + +#searchResult .searchResultLine:hover { + background-color: #f1f1f1; +} + +#searchResult .searchResultLine img { + width: 50px; + height: 50px; + padding: 5px; +} \ No newline at end of file