diff --git a/docker-compose/requirements/djangoserver/Dockerfile b/docker-compose/requirements/djangoserver/Dockerfile
index 3e2c7d7..794eead 100644
--- a/docker-compose/requirements/djangoserver/Dockerfile
+++ b/docker-compose/requirements/djangoserver/Dockerfile
@@ -2,8 +2,16 @@ FROM debian:bullseye
RUN apt update
RUN apt upgrade -y
+RUN apt install gnupg curl -y
+
+RUN echo "deb http://ppa.launchpad.net/deadsnakes/ppa/ubuntu focal main" | tee /etc/apt/sources.list.d/deadsnakes-ppa.list
+RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A755776
+RUN apt update
+RUN apt upgrade -y
+RUN apt install -y python3.12 postgresql-client
+RUN curl https://bootstrap.pypa.io/get-pip.py -o /root/get-pip.py
+RUN python3.12 /root/get-pip.py
-RUN apt install -y python3 python3-pip postgresql-client
RUN pip3 install requests django psycopg "channels[daphne]"
ARG DB_HOST=;
@@ -18,19 +26,19 @@ ENV PYTHONUNBUFFERED=1
ENV UID_42=${UID_42}
ENV SECRET_42=${SECRET_42}
+COPY start.sh /root/start.sh
+
RUN mkdir -p /var/www/djangoserver/
-RUN mkdir -p /var/www/djangoserver/static/
-COPY file/server /var/www/djangoserver/server
-RUN chmod 755 /var/www/djangoserver/
-RUN chown -R www-data:www-data /var/www/djangoserver/
-
-RUN sed -i "s/VAR_DB_HOST/$DB_HOST/" /var/www/djangoserver/server/server/settings.py
-RUN sed -i "s/VAR_DB_NAME/$DB_NAME/" /var/www/djangoserver/server/server/settings.py
-RUN sed -i "s/VAR_DB_USERNAME/$DB_USERNAME/" /var/www/djangoserver/server/server/settings.py
-RUN sed -i "s/VAR_DB_PASSWORD/$DB_PASSWORD/" /var/www/djangoserver/server/server/settings.py
-
WORKDIR /var/www/djangoserver
STOPSIGNAL SIGKILL
+RUN mkdir -p /var/www/djangoserver/static/
+
+COPY file/server /var/www/djangoserver/server
+RUN chmod 755 /var/www/djangoserver/ && chown -R www-data:www-data /var/www/djangoserver/
+
+RUN sed -i "s/VAR_DB_HOST/$DB_HOST/" /var/www/djangoserver/server/server/settings.py && \
+sed -i "s/VAR_DB_NAME/$DB_NAME/" /var/www/djangoserver/server/server/settings.py && \
+sed -i "s/VAR_DB_USERNAME/$DB_USERNAME/" /var/www/djangoserver/server/server/settings.py && \
+sed -i "s/VAR_DB_PASSWORD/$DB_PASSWORD/" /var/www/djangoserver/server/server/settings.py
-COPY start.sh /root/start.sh
ENTRYPOINT ["sh", "/root/start.sh"]
diff --git a/docker-compose/requirements/djangoserver/file/server/server/settings.py b/docker-compose/requirements/djangoserver/file/server/server/settings.py
index 413abc0..8daaef5 100644
--- a/docker-compose/requirements/djangoserver/file/server/server/settings.py
+++ b/docker-compose/requirements/djangoserver/file/server/server/settings.py
@@ -123,6 +123,12 @@ USE_TZ = True
STATIC_URL = 'static/'
+STATIC_DIRS = [
+ BASE_DIR/ "static"
+]
+
+STATIC_ROOT = BASE_DIR / 'staticfiles'
+
# Default primary key field type
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
diff --git a/docker-compose/requirements/djangoserver/file/server/server/templates/index.html b/docker-compose/requirements/djangoserver/file/server/server/templates/index.html
new file mode 100644
index 0000000..a14605d
--- /dev/null
+++ b/docker-compose/requirements/djangoserver/file/server/server/templates/index.html
@@ -0,0 +1,127 @@
+
+
+
+
+
+ Chat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officia totam cupiditate magni unde expedita molestiae eum aliquam fugit voluptatibus omnis! Dolores, ipsa inventore necessitatibus numquam aspernatur in perferendis id voluptas?
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officia totam cupiditate magni unde expedita molestiae eum aliquam fugit voluptatibus omnis! Dolores, ipsa inventore necessitatibus numquam aspernatur in perferendis id voluptas?
+
+
+
+
+
+
+
Tom, tomoron
+
Partie Backend
+
+
Tom est spécialisé en développement backend et travaille principalement avec Node.js et MongoDB.
+
+
+
+
+
Mathis, madegryc
+
Partie Frontend / Design
+
+
Tom est spécialisé en développement backend et travaille principalement avec Node.js et MongoDB.
+
+
+
+
+
Eddy, edbernar
+
Partie Midend
+
+
Tom est spécialisé en développement backend et travaille principalement avec Node.js et MongoDB.
+
+
+
+
+
Hugo, hubourge
+
Partie jeu
+
+
Tom est spécialisé en développement backend et travaille principalement avec Node.js et MongoDB.
+
+
+
+
+
+
+ `);
+ infoPanel.divMessage.scrollTop = infoPanel.divMessage.scrollHeight;
+ }
+}
+
+export { typeNewPrivateMessage };
\ No newline at end of file
diff --git a/docker-compose/requirements/nginx/static/typeResponse/typePrivateListMessage.js b/docker-compose/requirements/nginx/static/typeResponse/typePrivateListMessage.js
new file mode 100644
index 0000000..eb75aa1
--- /dev/null
+++ b/docker-compose/requirements/nginx/static/typeResponse/typePrivateListMessage.js
@@ -0,0 +1,43 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* typePrivateListMessage.js :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: edbernar {
+
+ if (messageListAvailable)
+ resolve();
+ else
+ messageListResolve = resolve;
+ });
+}
+
+function typePrivateListMessage(list) {
+ messageList = list;
+ messageListAvailable = true;
+ if (messageListResolve)
+ {
+ messageListResolve();
+ messageListResolve = null;
+ messageListAvailable = false;
+ }
+}
+
+export { messageList, infoPanel, typePrivateListMessage, waitForMessageList };
\ No newline at end of file
diff --git a/docker-compose/requirements/nginx/static/typeResponse/typePrivateListUser.js b/docker-compose/requirements/nginx/static/typeResponse/typePrivateListUser.js
new file mode 100644
index 0000000..e8e4df1
--- /dev/null
+++ b/docker-compose/requirements/nginx/static/typeResponse/typePrivateListUser.js
@@ -0,0 +1,36 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* typePrivateListUser.js :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: edbernar {
+ if (userListAvailable)
+ resolve();
+ else
+ userListResolve = resolve;
+ });
+}
+
+function typePrivateListUser(list) {
+ userList = list;
+ userListAvailable = true;
+ if (userListResolve)
+ {
+ userListResolve();
+ userListResolve = null;
+ }
+}
+
+export { userList, typePrivateListUser, waitForUserList };
\ No newline at end of file
diff --git a/docker-compose/requirements/nginx/static/websocket.js b/docker-compose/requirements/nginx/static/websocket.js
new file mode 100644
index 0000000..2e6f6fb
--- /dev/null
+++ b/docker-compose/requirements/nginx/static/websocket.js
@@ -0,0 +1,124 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* websocket.js :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: edbernar {
+ let token = getCookie("token");
+
+ status = 1;
+ console.log('Connected');
+ if (token)
+ sendRequest("login", {type: "byToken", token: token});
+ else
+ connectedWith42Func();
+};
+
+socket.onmessage = (event) => {
+ let response;
+
+ try {
+ response = JSON.parse(event.data);
+ } catch {
+ return ;
+ }
+ if (response.code >= 9000 && response.code <= 9999)
+ {
+ try {
+ errorFunction[errorCode.indexOf(response.code)]();
+ } catch {
+ console.warn(response);
+ }
+ }
+ else
+ {
+ try {
+ functionResponse[typeResponse.indexOf(response.type)](response.content);
+ } catch {
+ console.warn(response);
+ }
+ }
+};
+
+socket.onclose = () => {
+ status = 0;
+ console.log('Disconnected');
+};
+
+function sendRequest(type, content) {
+ let coc = null;
+
+ if (status === 0)
+ {
+ console.warn('Not connected');
+ return ;
+ }
+ if (content instanceof Object)
+ coc = JSON.stringify(content);
+ else
+ coc = content;
+ if (getCookie("token"))
+ {
+ socket.send(JSON.stringify({
+ type: type,
+ token: getCookie("token"),
+ content: content
+ }));
+ }
+ else
+ {
+ socket.send(JSON.stringify({
+ type: type,
+ content: content
+ }));
+ }
+}
+
+export { socket, sendRequest };
\ No newline at end of file
diff --git a/site/interface/site/home3D/Screen.js b/site/interface/site/home3D/Screen.js
index f7d273a..5b63767 100644
--- a/site/interface/site/home3D/Screen.js
+++ b/site/interface/site/home3D/Screen.js
@@ -3,10 +3,10 @@
/* ::: :::::::: */
/* Screen.js :+: :+: :+: */
/* +:+ +:+ +:+ */
-/* By: marvin +#+ +:+ +#+ */
+/* By: edbernar {
const intensity = Math.random() * 2 + 10;
- pointLight.intensity = intensity * this.pointLightIntensity > 13 * this.pointLightIntensity ? 13 * this.pointLightIntensity : intensity * this.pointLightIntensity;
+ pointLight.intensity = intensity * light.point > 13 * light.point ? 13 * light.point : intensity * light.point;
}, 100);
return (mesh);
}
- #showVideo(path)
+ changeVideo(path)
+ {
+ this.#disposeVideo();
+ this.showVideo(path);
+ }
+
+ showVideo(path)
{
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d', { willReadFrequently: true });
@@ -92,9 +109,12 @@ class Screen
const texture = new THREE.CanvasTexture(canvas);
const material = new THREE.MeshBasicMaterial({ map: texture,color: 0xffffff, transparent: true, opacity: 1 });
+ canvas.video = video;
+ canvas.context = context;
canvas.width = 534;
canvas.height = 360;
- video.src = path + '?t=' + new Date().getTime();
+ this.canvasVideo = canvas;
+ video.src = path;
video.loop = true;
video.muted = true;
video.crossOrigin = 'anonymous';
@@ -107,37 +127,70 @@ class Screen
}).catch(err => console.error("Error playing video: ", err));
});
- function addNoiseOnImage(context)
- {
- const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
- const data = imageData.data;
- for (let i = 0; i < data.length; i += 4)
- {
- const r = data[i];
- const g = data[i + 1];
- const b = data[i + 2];
- const brightness = (3 * r + 4 * g + b) >>> 3;
- const noise = Math.random() * 128 - 32;
- data[i] = data[i + 1] = data[i + 2] = brightness + noise;
- }
- context.putImageData(imageData, 0, 0);
- }
+ // function addNoiseOnImage(context)
+ // {
+ // const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
+ // const data = imageData.data;
+ // for (let i = 0; i < data.length; i += 4)
+ // {
+ // const r = data[i];
+ // const g = data[i + 1];
+ // const b = data[i + 2];
+ // const brightness = (3 * r + 4 * g + b) >>> 3;
+ // const noise = Math.random() * 128 - 32;
+ // data[i] = data[i + 1] = data[i + 2] = brightness + noise;
+ // }
+ // context.putImageData(imageData, 0, 0);
+ // }
function updateCanvas()
{
- if (!video.paused && !video.ended)
+ if (canvas.video != null || canvas.video == undefined)
{
- context.clearRect(0, 0, canvas.width, canvas.height);
- context.drawImage(video, 0, 0, canvas.width, canvas.height);
- addNoiseOnImage(context);
- texture.needsUpdate = true;
+ if (canvas.video && !canvas.video.paused && !canvas.video.ended)
+ {
+ context.clearRect(0, 0, canvas.width, canvas.height);
+ context.drawImage(canvas.video, 0, 0, canvas.width, canvas.height);
+ // addNoiseOnImage(context);
+ texture.needsUpdate = true;
+ }
+ requestAnimationFrame(updateCanvas);
}
- requestAnimationFrame(updateCanvas);
}
- texture.offset.set(0.02, 0);
+ texture.offset.set(0.05, 0);
this.screen.material = material;
- video.load();
+ canvas.video.load();
}
+
+ #disposeVideo()
+ {
+ if (this.canvasVideo)
+ {
+ const canvas = this.canvasVideo;
+ const video = canvas.video;
+ const texture = this.screen.material.map;
+
+ if (video)
+ {
+ video.pause();
+ video.src = '';
+ video.removeAttribute('src');
+ video.load();
+ }
+ if (texture)
+ texture.dispose();
+ canvas.video = null;
+ canvas.context = null;
+ if (this.screen)
+ {
+ this.screen.material.map = null;
+ this.screen.material.dispose();
+ }
+ this.canvasVideo = null;
+ }
+ }
+
+
};
-export { Screen };
\ No newline at end of file
+export { Screen, light };
\ No newline at end of file
diff --git a/site/interface/site/home3D/home3D.js b/site/interface/site/home3D/home3D.js
index d482ec4..2d4ce2f 100644
--- a/site/interface/site/home3D/home3D.js
+++ b/site/interface/site/home3D/home3D.js
@@ -3,19 +3,20 @@
/* ::: :::::::: */
/* home3D.js :+: :+: :+: */
/* +:+ +:+ +:+ */
-/* By: marvin +#+ +:+ +#+ */
+/* By: edbernar {
- screen.pointLightIntensity -= 0.2;
+ light.point -= 0.2;
screen.screen.material.opacity -= 0.05;
if (screen.screen.material.opacity <= 0)
{
clearInterval(interval);
setTimeout(() => {
interval = setInterval(() => {
- screen.pointLightIntensity += 0.2;
+ light.point += 0.2;
screen.screen.material.opacity += 0.05;
if (screen.screen.material.opacity >= 1)
{
clearInterval(interval);
+ interval = setInterval(() => {
+ light.point += 0.2;
+ if (light.point >= 1)
+ clearInterval(interval);
+ }, 10);
isInFade = false;
}
}, 20);
@@ -132,6 +142,15 @@ function createCube()
scene.add(mesh);
}
+const raycaster = new THREE.Raycaster();
+const mouse = new THREE.Vector2();
+
+document.addEventListener( 'mousemove', (event) => {
+ event.preventDefault();
+ mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
+ mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
+});
+
function home3D()
{
@@ -151,11 +170,57 @@ function createPlane()
scene.add(mesh);
}
+const video = {
+ pong: '/modeles/pong.mp4',
+ login: '/modeles/notLogin.webm'
+}
+let actualVideo = -1;
+if (Math.random() % 100 > 0.97)
+ video.pong = './modeles/easteregg.webm'
+
+setTimeout(() => {
+ screen.changeVideo(video.pong);
+ actualVideo = 0;
+}, 100);
function loop()
{
+ stats.begin()
+ raycaster.setFromCamera( mouse, camera );
+ const intersects = raycaster.intersectObjects( scene.children, false );
+
+ if (!screen.canvasVideo)
+ {
+ composer.render();
+ stats.end();
+ return ;
+ }
+ if (intersects.length === 0)
+ {
+ if (actualVideo != 0)
+ {
+ console.log("change 1");
+ screen.changeVideo(video.pong);
+ actualVideo = 0;
+ }
+ }
+ else if (intersects[0].object == screen.screen)
+ {
+ if (actualVideo != 1)
+ {
+ console.log("change 2");
+ screen.changeVideo(video.login);
+ actualVideo = 1;
+ }
+ }
+ else if (actualVideo != 0)
+ {
+ console.log("change 3");
+ screen.changeVideo(video.pong);
+ actualVideo = 0;
+ }
composer.render();
- // renderer.render(scene, camera);
+ stats.end();
}
diff --git a/site/interface/site/modeles/easteregg.webm b/site/interface/site/modeles/easteregg.webm
new file mode 100644
index 0000000..f2d9ab7
Binary files /dev/null and b/site/interface/site/modeles/easteregg.webm differ
diff --git a/site/interface/site/modeles/notLogin.webm b/site/interface/site/modeles/notLogin.webm
new file mode 100644
index 0000000..896ea73
Binary files /dev/null and b/site/interface/site/modeles/notLogin.webm differ
diff --git a/site/interface/site/modeles/oldEffectTv.mp4 b/site/interface/site/modeles/oldEffectTv.mp4
new file mode 100644
index 0000000..86c4185
Binary files /dev/null and b/site/interface/site/modeles/oldEffectTv.mp4 differ