#include #include "engine/bitboard.h" #include "engine/moves.h" #include "engine/fen.h" #include "fcntl.h" #include "ipc.c" #define LOG_MODULE "engine" #include "logger/logger.h" struct sqrstr { char data[2]; }; struct sqrstr sqr_to_str(int i) { assert(i < 64); return (struct sqrstr) { .data = {(i / 10) + '0', (i % 10) + '0' } }; } int main(void) { mqd_t logging = mq_open("/logs", O_WRONLY); mqd_t tx = mq_open("/engine_to_server", O_WRONLY); mqd_t rx = mq_open("/server_to_engine", O_RDONLY); while (1) { char* x = read_queue(rx); log_infof("Received: %s", x); moves_t moves = moves_init(); struct fen_load result = load_fen(x); free(x); if (result.failed) { log_warnf("Invalid fen"); send_queue(tx, "Failed", 7); return 0; } log_infof("Valid fen"); position_t position = result.position; get_moves(&moves, position); send_queue(tx, "Sending", 8); char buf[128]; for (int i = 0; i <= moves.length / 32; i++) { for (int ii = 0; ii < 32; ii++) { if (moves.length <= 4 * i + ii) continue; struct sqrstr from_str = sqr_to_str(moves.moves[4 * i + ii].from); struct sqrstr to_str = sqr_to_str(moves.moves[4 * i + ii].to); buf[4 * ii + 0] = from_str.data[0]; buf[4 * ii + 1] = from_str.data[1]; buf[4 * ii + 2] = to_str.data[0]; buf[4 * ii + 3] = to_str.data[1]; buf[4 * ii + 4] = 0; } send_queue(tx, buf, sizeof(buf)); } } return 0; } #include "engine/bitboard.c" #include "engine/moves.c" #include "engine/fen.c"