Program Listing for File API.hpp

Return to documentation for file (gui/API/API.hpp)

#pragma once

#include <array>
#include <mutex>

#include "API/Incantation/Incantation.hpp"
#include "API/TileMap/Tilemap.hpp"
#include "API/Trantor/Trantor.hpp"

#include <sys/poll.h>

class API {
private:
  std::array<int, 2> _pipeFdNetwork;
  std::array<int, 2> _pipeFdEvents;
  std::array<struct pollfd, 1> _pollOutFd;
  std::array<struct pollfd, 1> _pollEventOutFd;
  std::mutex _commandListLocker;

  Tilemap _tilemap;
  std::mutex _tilemapLocker;

  std::vector<std::string> _allTeamName;
  std::mutex _allTeamNameLocker;

  std::map<std::string, std::vector<Trantor>> _teams;
  std::mutex _teamsLocker;

  std::vector<Incantation> _incantationList;
  std::mutex _incantationListLocker;

  std::map<int, std::pair<int, int>> _eggList;
  std::mutex _eggListLocker;

  short _timeUnit = 0;
  std::mutex _timeUnitLocker;

  bool _isGameRunning = false;
  std::mutex _isGameRunningLocker;

  std::string _winner;
  std::mutex _winnerLocker;

  std::vector<std::string> _serverMessage;
  std::mutex _serverMessageLocker;

public:
  API();
  ~API() = default;

  void WriteMessage(const std::string &msg);

  [[nodiscard]] int GetInFd() const
  {
    return _pipeFdNetwork[0];
  }

  [[nodiscard]] int GetEventsInFd() const
  {
    return _pipeFdEvents[0];
  }

  [[nodiscard]] std::map<std::string, std::vector<Trantor>> GetTeams()
  {
    std::lock_guard<std::mutex> lock(_teamsLocker);
    return _teams;
  }

  Tilemap GetTilemap();

  std::map<int, std::pair<int, int>> GetEggList()
  {
    std::lock_guard<std::mutex> lock(_eggListLocker);
    return _eggList;
  }

  std::vector<std::string> GetTeamsName();

  void AddEgg(int id, int x, int y);

  void DeleteEgg(int id);

  void ClearCommand();

  // FROM GIU

  void AskMapSize();

  void AskAllTileContent();
  void AskTileContent(int x, int y);

  void AskAllTeamName();

  void AskAllPlayerPos();
  void AskPlayerPos(int id);

  void AskAllPlayerLevel();
  void AskPlayerLevel(int id);

  void AskAllPlayerInventory();
  void AskPlayerInventory(int id);

  // FROM SERVER

  void ParseManageCommand(std::string &command);

  void AddPlayer(
    int id,
    int x,
    int y,
    int orientation,
    int level,
    std::string teamsName);

  void HandleMSZ(std::stringstream &ss);

  void HandleBCT(std::stringstream &ss);

  static void HandleMCT();

  void HandleTNA(std::stringstream &ss);

  void HandlePNW(std::stringstream &ss);

  void HandlePPO(std::stringstream &ss);

  void HandlePLV(std::stringstream &ss);

  void HandlePIN(std::stringstream &ss);

  void HandlePEX(std::stringstream &ss);

  void HandlePBC(std::stringstream &ss);

  void HandlePIC(std::stringstream &ss);

  void HandlePIE(std::stringstream &ss);

  void HandlePFK(std::stringstream &ss);

  void HandlePDR(std::stringstream &ss);

  void HandlePGT(std::stringstream &ss);

  void HandlePDI(std::stringstream &ss);

  void HandleENW(std::stringstream &ss);

  void HandleEBO(std::stringstream &ss);

  void HandleEDI(std::stringstream &ss);

  void HandleSGT(std::stringstream &ss);

  void HandleSST(std::stringstream &ss);

  void HandleSEG(std::stringstream &ss);

  void HandleSMG(std::stringstream &ss);

  static void HandleSUC();

  static void HandleSBP();
};