Skip to content

Commit db1b1ed

Browse files
committed
GPT awesome
1 parent b93096c commit db1b1ed

File tree

2 files changed

+153
-65
lines changed

2 files changed

+153
-65
lines changed

mysql.cc

Lines changed: 147 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -41,29 +41,29 @@ void sql_process_request(std::string sender, std::string receiver, std::string a
4141
if (attitude == "allow")
4242
{
4343
std::string readData = "SELECT friends FROM users WHERE username = ?";
44-
std::string* RS = new std::string[2]{receiver, sender}; // R, S
44+
std::string *RS = new std::string[2]{receiver, sender}; // R, S
4545

46-
for(int i = 0; i < 2; i++)
46+
for (int i = 0; i < 2; i++)
4747
{
4848
readDatament = con->prepareStatement(readData);
4949
readDatament->setString(1, RS[i]);
5050
resultSet = readDatament->executeQuery();
5151

5252
std::string friendsList;
53-
if(resultSet->next())
53+
if (resultSet->next())
5454
friendsList = resultSet->getString("friends");
55-
56-
if(RS[i] == receiver) // i == 0;
55+
56+
if (RS[i] == receiver) // i == 0;
5757
{
5858
size_t pos = friendsList.find(sender);
59-
if(pos != std::string::npos)
59+
if (pos != std::string::npos)
6060
return;
6161
}
6262

6363
std::string updateQuery = "UPDATE users SET friends = ? WHERE username = ?";
6464
sql::PreparedStatement *update = con->prepareStatement(updateQuery);
6565

66-
if(friendsList != "")
66+
if (friendsList != "")
6767
{
6868
friendsList += "," + RS[1 - i];
6969
update->setString(1, friendsList);
@@ -76,16 +76,15 @@ void sql_process_request(std::string sender, std::string receiver, std::string a
7676
}
7777

7878
update->execute();
79-
delete update, update = nullptr;
79+
delete update;
8080
}
81-
delete RS, RS = nullptr;
81+
delete RS;
8282
}
8383

84-
delete updateStatement, updateStatement = nullptr;
85-
delete resultSet, resultSet = nullptr;
86-
delete readDatament, readDatament = nullptr;
87-
delete con, con = nullptr;
88-
delete driver, driver = nullptr;
84+
delete updateStatement;
85+
delete resultSet;
86+
delete readDatament;
87+
delete con;
8988

9089
return;
9190
}
@@ -121,22 +120,21 @@ void sql_addrequest(std::string sender, std::string receiver)
121120
{
122121
req += "," + sender;
123122
updateStatement->setString(1, req);
124-
updateStatement->setString(2, receiver);
123+
updateStatement->setString(2, receiver);
125124
}
126125
else
127126
{
128127
updateStatement->setString(1, sender);
129128
updateStatement->setString(2, receiver);
130129
}
131130
updateStatement->execute();
132-
delete updateStatement, updateStatement = nullptr;
133-
}
134-
135-
delete resultSet, resultSet = nullptr;
136-
delete readDatament, readDatament = nullptr;
137-
delete tool, tool = nullptr;
138-
delete con, con = nullptr;
139-
delete driver, driver = nullptr;
131+
delete updateStatement;
132+
}
133+
134+
delete resultSet;
135+
delete readDatament;
136+
delete tool;
137+
delete con;
140138
}
141139

142140
void sql_addconnect(std::string connectptr)
@@ -151,9 +149,8 @@ void sql_addconnect(std::string connectptr)
151149
sql::PreparedStatement *insertConnect = con->prepareStatement(classMysql);
152150
insertConnect->setString(4, connectptr);
153151

154-
delete insertConnect, insertConnect = nullptr;
155-
delete con, con = nullptr;
156-
delete driver, driver = nullptr;
152+
delete insertConnect;
153+
delete con;
157154
}
158155
catch (sql::SQLException &e)
159156
{
@@ -178,9 +175,8 @@ void sql_addhistory(std::string sender, std::string receiver, std::string messag
178175
insertData->setString(4, receiver);
179176
insertData->executeUpdate();
180177

181-
delete insertData, insertData = nullptr;
182-
delete con, con = nullptr;
183-
delete driver, driver = nullptr;
178+
delete insertData;
179+
delete con;
184180
}
185181
catch (sql::SQLException &e)
186182
{
@@ -205,29 +201,114 @@ void sql_add(std::string username, std::string passwd, int avatar)
205201
ptool->setInt(3, avatar);
206202
ptool->executeUpdate();
207203

208-
delete ptool, ptool = nullptr;
209-
delete tool, tool = nullptr;
210-
delete con, con = nullptr;
211-
delete driver, driver = nullptr;
204+
delete ptool;
205+
delete tool;
206+
delete con;
207+
}
208+
catch (sql::SQLException &e)
209+
{
210+
std::cerr << "SQL Exception: " << e.what() << std::endl;
211+
}
212+
}
213+
214+
Json::Value get_chat_info(std::string me, std::string who_send_me)
215+
{
216+
Json::Value json;
217+
std::string send[2] = {me, who_send_me};
218+
219+
try
220+
{
221+
sql::mysql::MySQL_Driver *driver;
222+
driver = sql::mysql::get_mysql_driver_instance();
223+
sql::Connection *con;
224+
con = driver->connect("tcp://8.130.48.157:3306", "root", "abc.123");
225+
con->setSchema("flypen");
226+
227+
for (int i = 0; i < 2; i++)
228+
{
229+
if (!send[i].empty())
230+
{
231+
std::string sql = "SELECT * FROM users WHERE username = ? LIMIT 1";
232+
sql::PreparedStatement *prepStmt = con->prepareStatement(sql);
233+
prepStmt->setString(1, send[i]);
234+
235+
sql::ResultSet *res = prepStmt->executeQuery();
236+
237+
if (res->next())
238+
{
239+
Json::Value user;
240+
int avatar = res->getInt("avatar");
241+
std::string friends = res->getString("friends");
242+
std::string req = res->getString("req");
243+
244+
// 使用lambda函数来查询用户信息
245+
auto fetchUserInfo = [&](const std::string &token) -> Json::Value
246+
{
247+
Json::Value info;
248+
info["username"] = token;
249+
std::string sql = "SELECT * FROM users WHERE username = ? LIMIT 1";
250+
sql::PreparedStatement *prepStmt = con->prepareStatement(sql);
251+
prepStmt->setString(1, token);
252+
sql::ResultSet *res = prepStmt->executeQuery();
253+
if (res->next())
254+
{
255+
info["avatar"] = res->getInt("avatar");
256+
}
257+
return info;
258+
};
259+
260+
Json::Value friends_array(Json::arrayValue);
261+
Json::Value req_array(Json::arrayValue);
262+
std::stringstream sf(friends);
263+
std::stringstream sr(req);
264+
std::string token;
265+
266+
// 处理好友列表
267+
while (std::getline(sf, token, ','))
268+
{
269+
Json::Value afriend = fetchUserInfo(token);
270+
friends_array.append(afriend);
271+
}
272+
273+
// 处理请求列表
274+
while (std::getline(sr, token, ','))
275+
{
276+
Json::Value areq = fetchUserInfo(token);
277+
req_array.append(areq);
278+
}
279+
280+
user["avatar"] = avatar;
281+
user["friends"] = friends_array;
282+
user["req"] = req_array;
283+
284+
Json::StreamWriterBuilder builder;
285+
std::string userJson = Json::writeString(builder, user);
286+
287+
json[send[i]] = user;
288+
}
289+
}
290+
}
212291
}
213292
catch (sql::SQLException &e)
214293
{
215294
std::cerr << "SQL Exception: " << e.what() << std::endl;
216295
}
296+
297+
return json;
217298
}
218299

300+
/*
219301
Json::Value get_chat_info(std::string me, std::string who_send_me)
220302
{
221303
Json::Value json;
304+
std::string* send = new std::string[2]{me, who_send_me};
222305
223306
try
224-
{
307+
{
225308
sql::mysql::MySQL_Driver *driver = sql::mysql::get_mysql_driver_instance();
226309
sql::Connection *con = driver->connect("tcp://8.130.48.157:3306", "root", "abc.123");
227310
con->setSchema("flypen");
228311
229-
std::string* send = new std::string[2]{me, who_send_me};
230-
231312
for (int i = 0; i < 2; i++)
232313
{
233314
if (!send[i].empty())
@@ -238,53 +319,56 @@ Json::Value get_chat_info(std::string me, std::string who_send_me)
238319
239320
sql::ResultSet *res = prepStmt->executeQuery();
240321
322+
// this
241323
if (res->next())
242324
{
243325
Json::Value user;
244326
int avatar = res->getInt("avatar");
245-
std::string* who = new std::string[2]{"req", "friends"};
327+
std::string token;
328+
std::string* FR = new std::string[2]{0};
329+
std::string* who = new std::string[2]{"friends", "req"};
246330
247331
for(int i = 0; i < 2; i++)
248332
{
249-
who[i] = res->getString(who[i]);
333+
FR[i] = res->getString(who[i]);
334+
Json::Value array(Json::arrayValue); // ???
250335
251-
Json::Value array(Json::arrayValue);
252-
std::stringstream strStream(who[i]);
253-
std::string token;
336+
std::stringstream strStream(FR[i]);
254337
255338
while(std::getline(strStream, token, ','))
256339
{
257340
Json::Value aVisit;
258341
aVisit["username"] = token;
259342
260343
std::string sql = "SELECT * FROM users WHERE username = ? LIMIT 1";
344+
sql::PreparedStatement *prepStmt = con->prepareStatement(sql);
261345
prepStmt->setString(1, token);
262346
sql::ResultSet *res = prepStmt->executeQuery();
263347
264348
if(res->next())
265349
aVisit["avatar"] = res->getInt("avatar"); // 假设avatar统一为4
266-
350+
267351
array.append(aVisit);
268-
user[who[i]] = array;
269352
}
353+
user[who[i]] = array;
270354
}
271355
user["avatar"] = avatar;
272356
273357
Json::StreamWriterBuilder builder;
274358
std::string userJson = Json::writeString(builder, user);
275359
json[send[i]] = user;
276-
277-
delete who, who = nullptr;
360+
361+
delete FR;
362+
delete who;
278363
}
279364
280-
delete res, res = nullptr;
281-
delete prepStmt, prepStmt = nullptr;
365+
delete res;
366+
delete prepStmt;
282367
}
283368
}
284369
285-
delete send, send = nullptr;
286-
delete con, con = nullptr;
287-
delete driver, driver = nullptr;
370+
delete send;
371+
delete con;
288372
}
289373
catch (sql::SQLException &e)
290374
{
@@ -293,6 +377,7 @@ Json::Value get_chat_info(std::string me, std::string who_send_me)
293377
294378
return json;
295379
}
380+
*/
296381

297382
bool sql_check(std::string user, std::string passwd)
298383
{
@@ -324,10 +409,9 @@ bool sql_check(std::string user, std::string passwd)
324409
result = false;
325410
}
326411

327-
delete res, res = nullptr;
328-
delete prepStmt, prepStmt = nullptr;
329-
delete con, con = nullptr;
330-
delete driver, driver = nullptr;
412+
delete res;
413+
delete prepStmt;
414+
delete con;
331415
}
332416
catch (sql::SQLException &e)
333417
{
@@ -340,9 +424,7 @@ bool sql_check(std::string user, std::string passwd)
340424

341425
Json::Value sql_find_my_msg(std::string me)
342426
{
343-
Json::Value result;
344427
std::cout << "login user: " << me << std::endl;
345-
346428
try
347429
{
348430
sql::mysql::MySQL_Driver *driver = sql::mysql::get_mysql_driver_instance();
@@ -354,7 +436,7 @@ Json::Value sql_find_my_msg(std::string me)
354436
std::string sqlFind = "SELECT * FROM chat WHERE sender = ? OR receiver = ?";
355437
sql::PreparedStatement *prepStmt = con->prepareStatement(sqlFind);
356438
prepStmt->setString(1, me);
357-
prepStmt->setString(2, me);
439+
prepStmt->setString(2, me);
358440
sql::ResultSet *res = prepStmt->executeQuery();
359441

360442
//=================== find end and update begin
@@ -364,10 +446,11 @@ Json::Value sql_find_my_msg(std::string me)
364446

365447
//=================== update end
366448

449+
Json::Value result;
367450
std::string sender;
368451
std::string receiver;
369452
std::map<std::string, Json::Value> sender_messages;
370-
453+
371454
while (res->next())
372455
{
373456
Json::Value item;
@@ -396,16 +479,15 @@ Json::Value sql_find_my_msg(std::string me)
396479
for (auto &x : sender_messages)
397480
result[x.first] = x.second;
398481

399-
delete res, res = nullptr;
400-
delete prepStmt, prepStmt = nullptr;
401-
delete con, con = nullptr;
402-
delete driver, driver = nullptr;
482+
delete res;
483+
delete prepStmt;
484+
delete con;
485+
486+
return result;
403487
}
404488
catch (sql::SQLException &e)
405489
{
406490
std::cerr << "SQL Exception: " << e.what() << std::endl;
407-
result = (Json::Value)"error";
491+
return "error";
408492
}
409-
410-
return result;
411493
}

package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)