aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md32
-rw-r--r--judge/core.ml10
2 files changed, 23 insertions, 19 deletions
diff --git a/README.md b/README.md
index 8666c35..f6045d5 100644
--- a/README.md
+++ b/README.md
@@ -9,23 +9,23 @@ standard et jouent leur coups sur la sortie standard.
Organisation des fichiers
-------------------------
-judge/
- xxx.ml le code du juge
- protocol.ml encodeur et décodeur pour le protocole décrit plus bas
- core.ml la partie principale
- main.ml la synchro
- gui.ml l'interface de visualisation
- morpionrec.ml la partie spécifique à un jeu
-morpionrec/
- joueur1/
- player le binaire/code du joueur
- * fichiers de données perso
- (le binaire est lancé dans le dossier du joueur)
+judge/ le code du juge
+ protocol.ml encodeur et décodeur pour le protocole décrit plus bas
+ core.ml la partie principale
+ main.ml la synchro
+ gui.ml l'interface de visualisation
+ morpionrec.ml la partie spécifique à un jeu
+
+morpionrec/ dossier pour un jeu
+ joueur1/ dossier pour une IA
+ player le binaire/code du joueur
+ ... fichiers de données perso
+ (le binaire est lancé dans le dossier du joueur)
joueur2/
player
- *
- 201411202011.log log de chaque séance
- 201411202011.score enregistrement des scores de chaque séance
+ ...
+ 201411202011.log log de chaque séance
+ 201411202011.score enregistrement des scores de chaque séance
Protocole d'entrée-sortie
@@ -78,7 +78,7 @@ Organisation du tournoi
Chaque paire ordonnée de joueurs distincts est considérée (pour chaque paire de
joueurs, il y a deux matchs, un où chaque joueur commence). Les matchs sont mis
-en attente, et n matchs sont lancés en parallèle (typiquement n = 4).
+en attente, et n matchs sont lancés en parallèle (typiquement n = #CPU/2).
Interface de visualisation du juge
diff --git a/judge/core.ml b/judge/core.ml
index 65a43a8..34d5dc9 100644
--- a/judge/core.ml
+++ b/judge/core.ml
@@ -67,6 +67,7 @@ module C (G: GAME) : CORE = struct
type player = {
name: string;
binary: string;
+ dir: string;
log_out: file_descr;
mutable score: int;
}
@@ -149,19 +150,21 @@ module C (G: GAME) : CORE = struct
let rec rd () =
try let s = readdir fd in
try
- let b = Filename.concat (Filename.concat !game_dir s) "player" in
+ let dir = Filename.concat !game_dir s in
+ let b = Filename.concat dir "player" in
let st = Unix.stat b in
if (st.st_kind = S_REG || st.st_kind = S_LNK)
&& (st.st_perm land 0o100 <> 0) then begin
Format.printf "- %s@." s;
(* open log output for player *)
- let p_log_file = Filename.concat (Filename.concat !game_dir s) "stderr.log" in
+ let p_log_file = Filename.concat dir "stderr.log" in
let p_log_out = Unix.openfile p_log_file [O_APPEND; O_CREAT; O_WRONLY] 0o644 in
let f = Format.formatter_of_out_channel (out_channel_of_descr p_log_out) in
Format.fprintf f "---- Begin session %s@." date;
Hashtbl.add players s
{ name = s;
binary = b;
+ dir;
log_out = p_log_out;
score = 0; }
end
@@ -188,12 +191,13 @@ module C (G: GAME) : CORE = struct
Format.printf "Launching match: %s vs. %s@." p1 p2;
let open_c p =
- let f =Format.formatter_of_out_channel (out_channel_of_descr p.log_out) in
+ let f = Format.formatter_of_out_channel (out_channel_of_descr p.log_out) in
Format.fprintf f "--- Begin game (%s vs. %s)@." p1 p2;
let (j2p_i, j2p_o) = pipe () in
let (p2j_i, p2j_o) = pipe () in
let pid = fork() in
if pid = 0 then begin
+ chdir p.dir;
dup2 j2p_i stdin;
dup2 p2j_o stdout;
dup2 p.log_out stderr;