2 #include <mysql/mysql.h>
12 std::lock_guard<std::mutex> guard(this->
_mutex);
14 std::string query =
"";
16 query +=
" `profileid`, `target_profileid` ";
18 query +=
" `PlayerFriends` ";
20 query +=
" `profileid` = ? ";
22 query +=
" `target_profileid` = ?";
24 int input_profileid = player.GetProfileId();
27 int output_target_profileid;
30 MYSQL_BIND* input_bind = (MYSQL_BIND *)calloc(2,
sizeof(MYSQL_BIND));
31 input_bind[0].buffer_type = MYSQL_TYPE_LONG;
32 input_bind[0].buffer = &input_profileid;
33 input_bind[0].is_unsigned =
false;
34 input_bind[1].buffer_type = MYSQL_TYPE_LONG;
35 input_bind[1].buffer = &input_profileid;
36 input_bind[1].is_unsigned =
false;
39 MYSQL_BIND* output_bind = (MYSQL_BIND *)calloc(2,
sizeof(MYSQL_BIND));
40 output_bind[0].buffer_type = MYSQL_TYPE_LONG;
41 output_bind[0].buffer = &output_profileid;
42 output_bind[0].is_unsigned =
false;
43 output_bind[1].buffer_type = MYSQL_TYPE_LONG;
44 output_bind[1].buffer = &output_target_profileid;
45 output_bind[1].is_unsigned =
false;
48 MYSQL_STMT* statement;
51 !this->
_init(&statement) ||
52 !this->
_prepare(statement, query, input_bind) ||
53 !this->
_execute(statement, output_bind)
65 int status = mysql_stmt_fetch(statement);
67 if (status == 1 || status == MYSQL_NO_DATA)
70 int friend_profileid = (output_profileid == input_profileid) ? output_target_profileid : output_profileid;
72 player.AddFriend(friend_profileid);
76 mysql_stmt_free_result(statement);
77 mysql_stmt_close(statement);
86 std::lock_guard<std::mutex> guard(this->
_mutex);
88 std::string query =
"";
89 query +=
"INSERT INTO `PlayerFriends` ";
90 query +=
" (`profileid`, `target_profileid`) ";
94 int input_profileid = player.GetProfileId();
95 int input_target_profileid = target_player.GetProfileId();
98 MYSQL_BIND* input_bind = (MYSQL_BIND *)calloc(2,
sizeof(MYSQL_BIND));
99 input_bind[0].buffer_type = MYSQL_TYPE_LONG;
100 input_bind[0].buffer = &input_profileid;
101 input_bind[0].is_unsigned =
false;
102 input_bind[1].buffer_type = MYSQL_TYPE_LONG;
103 input_bind[1].buffer = &input_target_profileid;
104 input_bind[1].is_unsigned =
false;
107 MYSQL_STMT* statement;
110 !this->
_init(&statement) ||
111 !this->
_prepare(statement, query, input_bind) ||
122 mysql_stmt_free_result(statement);
123 mysql_stmt_close(statement);
131 std::lock_guard<std::mutex> guard(this->
_mutex);
133 std::string query =
"";
134 query +=
"DELETE FROM ";
135 query +=
" `PlayerFriends` ";
137 query +=
" (`profileid` = ? AND `target_profileid` = ?) ";
139 query +=
" (`target_profileid` = ? AND `profileid` = ?)";
141 int input_profileid = player.GetProfileId();
142 int input_target_profileid = target_player.GetProfileId();
145 MYSQL_BIND* input_bind = (MYSQL_BIND *)calloc(4,
sizeof(MYSQL_BIND));
146 input_bind[0].buffer_type = MYSQL_TYPE_LONG;
147 input_bind[0].buffer = &input_profileid;
148 input_bind[0].is_unsigned =
false;
149 input_bind[1].buffer_type = MYSQL_TYPE_LONG;
150 input_bind[1].buffer = &input_target_profileid;
151 input_bind[1].is_unsigned =
false;
152 input_bind[2].buffer_type = MYSQL_TYPE_LONG;
153 input_bind[2].buffer = &input_profileid;
154 input_bind[2].is_unsigned =
false;
155 input_bind[3].buffer_type = MYSQL_TYPE_LONG;
156 input_bind[3].buffer = &input_target_profileid;
157 input_bind[3].is_unsigned =
false;
160 MYSQL_STMT* statement;
163 !this->
_init(&statement) ||
164 !this->
_prepare(statement, query, input_bind) ||
175 mysql_stmt_free_result(statement);
176 mysql_stmt_close(statement);
Represents a player with extended statistics.
bool _prepare(MYSQL_STMT *statement, const std::string &query)
Prepares a MySQL statement with a query.
bool _init(MYSQL_STMT **statement)
Initializes a MySQL statement object.
bool insertPlayerFriend(const Battlefield::Player &player, const Battlefield::Player &target_player)
Inserts a friendship relation between two players into the database.
bool queryPlayerFriendsByProfileId(Battlefield::Player &player)
Queries a player's friends by their profile ID.
bool _execute(MYSQL_STMT *statement)
Executes a prepared MySQL statement.
bool removePlayerFriend(const Battlefield::Player &player, const Battlefield::Player &target_player)
Removes a friendship relation between two players from the database.
std::mutex _mutex
Mutex for thread-safe access to the database connection.