juegos

Juegos de terminal de Pancho: Catan (TUI, GUI, web, servidor, PicoCalc), ajedrez, calculadora y minijuegos
git clone https://git.lu3dhn.xyz/juegos.git
Log | Files | Refs

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