session.h (2803B)
1 /* session.h - una partida vista desde este cliente: local (la autoridad corre 2 * aca, con el motor en otro hilo) o remota (servidor VPS / host LAN). */ 3 #ifndef SESSION_H 4 #define SESSION_H 5 6 #include <pthread.h> 7 #include <stdio.h> 8 #include "../core/chess.h" 9 #include "paths.h" 10 #include "uci.h" 11 12 enum PlayerKind { PL_HUMAN, PL_ENGINE, PL_REMOTE }; 13 14 typedef struct Net Net; 15 16 typedef struct Session { 17 bool local; /* true: la autoridad corre aca */ 18 Game g; 19 uint8_t kind[2]; /* por color */ 20 int level[2]; /* nivel del motor si kind es PL_ENGINE (LEVEL_STOCKFISH: externo) */ 21 char names[2][24]; 22 long long turn_start; /* now_ms() cuando empezo el turno */ 23 /* motor (en otro hilo) */ 24 Engine eng; 25 TTEntry *tt; 26 pthread_t th; 27 bool busy, job_move; 28 volatile int stop, done; 29 Game job_game; 30 SearchLimits job_lim; 31 SearchResult job_res; 32 bool job_sf; /* esta busqueda la hace Stockfish */ 33 Uci sf; /* Stockfish abierto (sf.pid > 0) */ 34 bool sf_failed; /* no arranco: se juega con el motor propio */ 35 long long engine_at; /* no antes de este momento (IA contra IA) */ 36 int engine_delay; 37 /* evaluacion para la barra (desde blancas) */ 38 bool want_eval, eval_valid; 39 int eval, eval_ply; 40 /* guardado */ 41 FILE *save; 42 char save_path[512]; 43 char pgn_path[512]; /* PGN que se reescribe despues de cada accion */ 44 Net *net; 45 int my_color; /* en red: el color de esta pantalla */ 46 char status[128]; 47 int last_err; 48 bool err_pending; 49 bool ended; /* se corto la conexion / se cerro */ 50 } Session; 51 52 void sess_new_local(Session *s, const Pos *start, const TimeCtl *tc, bool allow_undo, 53 const uint8_t kinds[2], const int levels[2], char names[2][24]); 54 /* partida local que sigue a una importada (PGN o FEN): se reproducen sus jugadas */ 55 void sess_new_imported(Session *s, const Game *src, const uint8_t kinds[2], const int levels[2], char names[2][24]); 56 bool sess_resume(Session *s, const char *path, char *err, int errlen); 57 int sess_submit(Session *s, Act *a); 58 void sess_poll(Session *s); 59 int sess_timeout(const Session *s); 60 int sess_fds(const Session *s, int *fds, int max); 61 int32_t sess_clock(const Session *s, int color); 62 bool sess_thinking(const Session *s); 63 void sess_close(Session *s); 64 uint8_t sess_local_mask(const Session *s); 65 void sess_on_act(Session *s, const Act *a); /* vista remota: accion que llego */ 66 67 bool latest_save(char *out, int n); 68 const char *last_pgn_path(void); /* data_dir()/ultima.pgn: copia del PGN de la ultima partida */ 69 70 #endif