Coverage report for ai


src/
File: src/bots/ABotPattern.cpp
Date: 2024-06-25 10:57:00
Lines:
0/72
0.0%
Functions:
0/6
0.0%
Branches:
0/90
0.0%

Line Branch Exec Source
1 /*
2 ** EPITECH PROJECT, 2024
3 ** zappy/ai
4 ** File description:
5 ** ABotPattern.hpp
6 */
7
8 #include "ABotPattern.hpp"
9
10 void ABotPattern::init(int sockfd, const std::string &teamName, const std::string &host, int port, int id, int idMessage)
11 {
12 _sockfd = sockfd;
13 _teamName = teamName;
14 _host = host;
15 _port = port;
16 _id = id;
17 _currentMessageId = idMessage;
18 initChild();
19 saveActionsFile += teamName + std::to_string(id) + ".txt";
20 }
21
22 void ABotPattern::run(const std::string &response)
23 {
24 std::string responseServer = "";
25 std::string responseBroadcast = "";
26 _message.content = "";
27 _allyMessage.content = "";
28 _enemyMessage.content = "";
29
30 // separe servers and broadcast, decrypt message
31 separateServerBroadcast(response, responseServer, responseBroadcast);
32
33 verifyServerIsRunning(response);
34 debugBotRun();
35
36 // Debug
37 debugResponses(responseServer, responseBroadcast);
38
39 if (!responseServer.empty())
40 _canAct = true;
41
42 if (!responseServer.empty() && _state.state != WAIT_FOR_BROADCAST_RESPONSE)
43 {
44 listen(responseServer);
45 }
46 if (!responseBroadcast.empty() && _state.state != WAIT_FOR_SERVER_RESPONSE)
47 {
48 listenBroadcastResponse();
49 }
50 if (_state.state != WAIT_FOR_BROADCAST_RESPONSE && _state.state != WAIT_FOR_SERVER_RESPONSE)
51 {
52 react(responseServer, responseBroadcast);
53 }
54 debugState();
55 debugMetadata();
56 }
57
58 void ABotPattern::react(const std::string &responseServer, const std::string &responseBroadcast)
59 {
60 if (_canAct)
61 {
62 if (!responseServer.empty() && !responseBroadcast.empty())
63 {
64 PRINT_ALERT("GET RESPONSES FROM SERVER AND BROADCAST\n");
65 }
66 if (!responseServer.empty() && _state.state != ACT_ON_BROADCAST)
67 {
68 if (_state.state != ACT_ON_BROADCAST)
69 act();
70 }
71 else if (!responseBroadcast.empty() && _state.state != ACT_ON_SERVER)
72 {
73 act();
74 }
75 }
76 }
77
78 void ABotPattern::act()
79 {
80 if (queue.empty())
81 {
82 updateStrategy();
83 }
84 if (!queue.empty())
85 {
86 queue.front().first();
87 queue.erase(queue.begin());
88 _canAct = false;
89 _iteration++;
90 }
91 if (_iteration % 20 == 0)
92 saveDataActions(saveActionsFile);
93 }
94
95 // Always put state listener before listener for actions
96 void ABotPattern::listen(const std::string &response)
97 {
98 if (_state.state == WAIT_FOR_SERVER_RESPONSE)
99 listenCancel(response);
100 if (_state.state == WAIT_FOR_SERVER_RESPONSE && isConcernedByIncantation())
101 listenIncantationReturnResponse(response);
102 else if (_state.lastAction.action == INVENTORY)
103 listenInventoryResponse(response);
104 else if (_state.lastAction.action == LOOK)
105 listenLookResponse(response);
106 else if (_state.lastAction.action == TAKE)
107 listenTakeResponse(response);
108 else if (isConcernedByIncantation())
109 listenIncantationResponse(response);
110 else if (_state.lastAction.action == CONNECT_NBR)
111 listenConnectNbrResponse(response);
112 }
113
114 void ABotPattern::verifyServerIsRunning(const std::string &response)
115 {
116 if (response.find("dead") != std::string::npos)
117 {
118 debugState();
119 PRINT_ALERT("END OF BOT\n");
120 exit(0);
121 }
122 }
123