Skip to content

Commit

Permalink
Change pong-server file architecture to properly separate the differe…
Browse files Browse the repository at this point in the history
…nt programs
  • Loading branch information
V-Fries committed Feb 7, 2024
1 parent caf7cf0 commit 9c4e5bd
Show file tree
Hide file tree
Showing 32 changed files with 139 additions and 90 deletions.
24 changes: 17 additions & 7 deletions .github/workflows/pong-server.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@ on:
branches:
- main
- dev
- basic-pong
- pong-game
pull_request:
branches:
- main
- dev
- basic-pong
- pong-game

jobs:
Expand All @@ -37,23 +35,35 @@ jobs:
- name: Copy shared files
run: |
cp -r pong_server/src/shared_code pong_server/src/game_creator/shared_code
cp -r pong_server/src/shared_code pong_server/src/game_server/shared_code
- name: Run unit tests game creator
working-directory: pong_server/
working-directory: pong_server/src/
run: |
export PONG_GAME_SERVERS_MIN_PORT=42200
export PONG_GAME_SERVERS_MAX_PORT=42210
export PONG_GAME_APP_PATH=`pwd`
cd src/game_creator
export GAME_SERVER_PATH=`pwd`/game_server/
cd game_creator
python3 manage.py test
- name: Run PEP8 check
working-directory: pong_server/
run: |
flake8 . --max-line-length=95
- name: Check imports in src
working-directory: pong_server/src/
- name: Check imports in game_creator
working-directory: pong_server/src/game_creator/
run: |
isort . --check-only
- name: Check imports in game_server
working-directory: pong_server/src/game_server/
run: |
isort . --check-only
- name: Check imports in shared_code
working-directory: pong_server/src/shared_code/
run: |
isort . --check-only
Expand Down
3 changes: 3 additions & 0 deletions pong_server/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
src/game_creator/shared_code
src/game_server/shared_code
src/redirection_server_deprecated/shared_code
8 changes: 6 additions & 2 deletions pong_server/dev_deprecated_redirection_server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ while true; do
kill -9 $(pgrep '[P]ython')
sleep 1
clear
python -m unittest discover test
`sed 's/^/export /' ../.env`
find . -name '*.py' | entr -z -d python3 -m src.redirection_server_deprecated
python -m unittest discover test
(
cd src/redirection_server_deprecated &&
find . -name '*.py' |
entr -z -d python3 main.py
)
done
2 changes: 1 addition & 1 deletion pong_server/dev_game_creator.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

export PONG_GAME_SERVERS_MIN_PORT=42200
export PONG_GAME_SERVERS_MAX_PORT=42210
export PONG_GAME_APP_PATH=~/git/transcendence/pong_server/
export GAME_SERVER_PATH=~/git/transcendence/pong_server/src/game_server/


(cd src/game_creator/ && python3 manage.py test) || exit $?
Expand Down
12 changes: 5 additions & 7 deletions pong_server/docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
FROM python:3.12.0-bookworm

# Créez le répertoire de travail et définissez-le comme répertoire de travail actuel
RUN mkdir /app
WORKDIR /app

# Copiez le fichier requirements.txt dans le conteneur
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

# Copy the gunicorn config file
COPY gunicorn/gunicorn.conf.py /app/gunicorn.conf.py

# Installez les dépendances
RUN pip install --no-cache-dir -r requirements.txt
COPY run.sh /app/run.sh
RUN chmod +x /app/run.sh

ARG PONG_GAME_APP_PATH
ARG GAME_SERVER_PATH
ARG PONG_GAME_SERVERS_MIN_PORT
ARG PONG_GAME_SERVERS_MAX_PORT

ENV PONG_GAME_APP_PATH=${PONG_GAME_APP_PATH}
ENV GAME_SERVER_PATH=${GAME_SERVER_PATH}
ENV PONG_GAME_SERVERS_MIN_PORT=${PONG_GAME_SERVERS_MIN_PORT}
ENV PONG_GAME_SERVERS_MAX_PORT=${PONG_GAME_SERVERS_MAX_PORT}
7 changes: 2 additions & 5 deletions pong_server/docker/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ services:

build:
args:
- PONG_GAME_APP_PATH=/app/
- GAME_SERVER_PATH=/app/src/game_server/
- PONG_GAME_SERVERS_MIN_PORT=${PONG_GAME_SERVERS_MIN_PORT}
- PONG_GAME_SERVERS_MAX_PORT=${PONG_GAME_SERVERS_MAX_PORT}
context: .
Expand All @@ -40,9 +40,6 @@ services:
- pong_server_code:/app/pong_server_code/
- ssl_certs:/app/ssl

command: sh -c 'cp -r /app/pong_server_code /app/src &&
rm -rf /app/src/game_creator/shared_code &&
cp -r /app/src/shared_code /app/src/game_creator/shared_code &&
gunicorn -c /app/gunicorn.conf.py'
command: /app/run.sh

restart: on-failure
2 changes: 1 addition & 1 deletion pong_server/docker/gunicorn/gunicorn.conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
# Number of workers
workers = 4

chdir = 'src/game_creator'
chdir = '/app/src/game_creator'

daemon = False

Expand Down
16 changes: 16 additions & 0 deletions pong_server/docker/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash

# Copy the volume code to the src folder so that I can modify it without
# changing anything on the host machine
cp -r /app/pong_server_code /app/src

# Copy the shared code to the game_creator folder
rm -rf /app/src/game_creator/shared_code
cp -r /app/src/shared_code /app/src/game_creator/shared_code

# Copy the shared code to the game_server folder
rm -rf /app/src/game_server/shared_code
cp -r /app/src/shared_code /app/src/game_server/shared_code

# Run game_creator
gunicorn -c /app/gunicorn.conf.py
15 changes: 15 additions & 0 deletions pong_server/linter.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

pylint () {
(
cd $1 &&
isort . &&
flake8 . --max-line-length=95
)
}

pylint src/game_creator
pylint src/game_server
pylint src/shared_code

pylint src/redirection_server_deprecated
Empty file removed pong_server/src/__init__.py
Empty file.
4 changes: 2 additions & 2 deletions pong_server/src/game_creator/api/GameCreator.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ def create_game_server(game_id: int, players: list[Optional[int]]) -> str:
@staticmethod
def _start_server(game_id: int, players: list[Optional[int]]) -> subprocess.Popen:
try:
command = ['python3', '-m', 'src.game_server', str(game_id)]
command = ['python3', 'main.py', str(game_id)]
for player in players:
command.append(str(player))
return subprocess.Popen(command,
stdout=subprocess.PIPE,
cwd=os.getenv('PONG_GAME_APP_PATH'),
cwd=os.getenv('GAME_SERVER_PATH'),
universal_newlines=True)
except Exception as e:
error = error_messages.popen_failed_to_run_command(str(e))
Expand Down
8 changes: 4 additions & 4 deletions pong_server/src/game_creator/api/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import socket
from typing import Optional

import api.error_messages as error_messages
from django.urls import reverse

import api.error_messages as error_messages
from game_creator.TestCaseNoDatabase import TestCaseNoDatabase
from shared_code import error_messages as shared_error_messages

Expand All @@ -14,12 +14,12 @@ class PostCreateGameTest(TestCaseNoDatabase):
def setUp(self):
self._port_min = os.getenv('PONG_GAME_SERVERS_MIN_PORT')
self._port_max = os.getenv('PONG_GAME_SERVERS_MAX_PORT')
self._app_path = os.getenv('PONG_GAME_APP_PATH')
self._app_path = os.getenv('GAME_SERVER_PATH')

def tearDown(self):
os.environ['PONG_GAME_SERVERS_MIN_PORT'] = self._port_min
os.environ['PONG_GAME_SERVERS_MAX_PORT'] = self._port_max
os.environ['PONG_GAME_APP_PATH'] = self._app_path
os.environ['GAME_SERVER_PATH'] = self._app_path

def post_request(self, request_body) -> (dict, int):
url = reverse('create_game')
Expand All @@ -40,7 +40,7 @@ def set_env_var(self,

os.environ['PONG_GAME_SERVERS_MIN_PORT'] = str(min_port)
os.environ['PONG_GAME_SERVERS_MAX_PORT'] = str(max_port)
os.environ['PONG_GAME_APP_PATH'] = app_path
os.environ['GAME_SERVER_PATH'] = app_path

def test_valid_matchmaking_request(self):
port = 4242
Expand Down
3 changes: 2 additions & 1 deletion pong_server/src/game_creator/api/urls.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from api.views import CreateGameView
from django.urls import path

from api.views import CreateGameView

urlpatterns = [
path('', CreateGameView.as_view(), name='create_game'),
]
7 changes: 4 additions & 3 deletions pong_server/src/game_creator/api/views.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import json
from typing import Optional

from api import error_messages
from api.GameCreator import GameCreator
from api.JsonResponseException import JsonResponseException
from django.http import JsonResponse
from django.utils.decorators import method_decorator
from django.views import View
from django.views.decorators.csrf import csrf_exempt

from api import error_messages
from api.GameCreator import GameCreator
from api.JsonResponseException import JsonResponseException


@method_decorator(csrf_exempt, name='dispatch')
class CreateGameView(View):
Expand Down
12 changes: 6 additions & 6 deletions pong_server/src/game_server/Game.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@

import numpy

import src.game_server.rooms as rooms
from src.game_server.Scene.PlayerFinder.PlayerFinder import PlayerFinder
from src.game_server.Scene.PlayerFinder.PlayerLocation import PlayerLocation
from src.game_server.Scene.Scene import Scene
from src.game_server.vector_to_dict import vector_to_dict
from src.shared_code.emit import emit
import rooms as rooms
from Scene.PlayerFinder.PlayerFinder import PlayerFinder
from Scene.PlayerFinder.PlayerLocation import PlayerLocation
from Scene.Scene import Scene
from shared_code.emit import emit
from vector_to_dict import vector_to_dict


class Game(object):
Expand Down
11 changes: 6 additions & 5 deletions pong_server/src/game_server/Scene/Ball.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

import numpy

from src.game_server import rooms, settings
from src.game_server.Scene.Player.Paddle import Paddle
from src.game_server.Scene.Segment2 import Segment2
from src.game_server.vector_to_dict import vector_to_dict
from src.shared_code.emit import emit
import rooms
import settings
from Scene.Player.Paddle import Paddle
from Scene.Segment2 import Segment2
from shared_code.emit import emit
from vector_to_dict import vector_to_dict


class Ball(object):
Expand Down
6 changes: 3 additions & 3 deletions pong_server/src/game_server/Scene/Match.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import numpy

from src.game_server.Scene.Ball import Ball
from src.game_server.Scene.Player.Player import Player
from src.game_server.vector_to_dict import vector_to_dict
from Scene.Ball import Ball
from Scene.Player.Player import Player
from vector_to_dict import vector_to_dict


class Match(object):
Expand Down
6 changes: 3 additions & 3 deletions pong_server/src/game_server/Scene/Player/Paddle.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import numpy

from src.game_server import settings
from src.game_server.Scene.Segment2 import Segment2
from src.game_server.vector_to_dict import vector_to_dict
import settings
from Scene.Segment2 import Segment2
from vector_to_dict import vector_to_dict


class Paddle(object):
Expand Down
8 changes: 4 additions & 4 deletions pong_server/src/game_server/Scene/Player/Player.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import numpy

from src.game_server import settings
from src.game_server.Scene.Player._Board import _Board
from src.game_server.Scene.Player.Paddle import Paddle
from src.game_server.vector_to_dict import vector_to_dict
import settings
from Scene.Player._Board import _Board
from Scene.Player.Paddle import Paddle
from vector_to_dict import vector_to_dict


class Player(object):
Expand Down
4 changes: 2 additions & 2 deletions pong_server/src/game_server/Scene/Player/_Board.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from src.game_server import settings
from src.game_server.vector_to_dict import vector_to_dict
import settings
from vector_to_dict import vector_to_dict


class _Board(object):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from src.game_server.Scene.Player.Player import Player
from src.game_server.Scene.PlayerFinder.PlayerLocation import PlayerLocation
from src.game_server.Scene.Scene import Scene
from Scene.Player.Player import Player
from Scene.PlayerFinder.PlayerLocation import PlayerLocation
from Scene.Scene import Scene


class PlayerFinder:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from src.game_server.Scene.Player.Player import Player
from Scene.Player.Player import Player


class Scene(object):
Expand Down
8 changes: 4 additions & 4 deletions pong_server/src/game_server/Scene/Scene.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import numpy

from src.game_server import settings
from src.game_server.Scene.Match import Match
from src.game_server.Scene.Player.Player import Player
from src.game_server.Scene.PlayerFinder.PlayerLocation import PlayerLocation
import settings
from Scene.Match import Match
from Scene.Player.Player import Player
from Scene.PlayerFinder.PlayerLocation import PlayerLocation


class Scene(object):
Expand Down
2 changes: 1 addition & 1 deletion pong_server/src/game_server/Scene/bounding_boxes.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import src.game_server.settings as settings
import settings as settings


class BallBoundingBox(object):
Expand Down
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
from aiohttp import web
from socketio.exceptions import ConnectionRefusedError

from src.game_server.Clock import Clock
from src.game_server.Game import Game
from src.game_server.update_player_movement_and_position import \
from Clock import Clock
from Game import Game
from shared_code import error_messages
from shared_code.emit import emit
from shared_code.get_json_web_token import get_json_web_token
from shared_code.get_query_string import get_query_string
from shared_code.setup_logging import setup_logging
from update_player_movement_and_position import \
update_player_direction_and_position
from src.shared_code import error_messages
from src.shared_code.emit import emit
from src.shared_code.get_json_web_token import get_json_web_token
from src.shared_code.get_query_string import get_query_string
from src.shared_code.setup_logging import setup_logging

sio = socketio.AsyncServer(cors_allowed_origins='*')
app = web.Application()
Expand Down
Loading

0 comments on commit 9c4e5bd

Please sign in to comment.