@@ -41,29 +41,29 @@ void sql_process_request(std::string sender, std::string receiver, std::string a
41
41
if (attitude == " allow" )
42
42
{
43
43
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
45
45
46
- for (int i = 0 ; i < 2 ; i++)
46
+ for (int i = 0 ; i < 2 ; i++)
47
47
{
48
48
readDatament = con->prepareStatement (readData);
49
49
readDatament->setString (1 , RS[i]);
50
50
resultSet = readDatament->executeQuery ();
51
51
52
52
std::string friendsList;
53
- if (resultSet->next ())
53
+ if (resultSet->next ())
54
54
friendsList = resultSet->getString (" friends" );
55
-
56
- if (RS[i] == receiver) // i == 0;
55
+
56
+ if (RS[i] == receiver) // i == 0;
57
57
{
58
58
size_t pos = friendsList.find (sender);
59
- if (pos != std::string::npos)
59
+ if (pos != std::string::npos)
60
60
return ;
61
61
}
62
62
63
63
std::string updateQuery = " UPDATE users SET friends = ? WHERE username = ?" ;
64
64
sql::PreparedStatement *update = con->prepareStatement (updateQuery);
65
65
66
- if (friendsList != " " )
66
+ if (friendsList != " " )
67
67
{
68
68
friendsList += " ," + RS[1 - i];
69
69
update->setString (1 , friendsList);
@@ -76,16 +76,15 @@ void sql_process_request(std::string sender, std::string receiver, std::string a
76
76
}
77
77
78
78
update->execute ();
79
- delete update, update = nullptr ;
79
+ delete update;
80
80
}
81
- delete RS, RS = nullptr ;
81
+ delete RS;
82
82
}
83
83
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;
89
88
90
89
return ;
91
90
}
@@ -121,22 +120,21 @@ void sql_addrequest(std::string sender, std::string receiver)
121
120
{
122
121
req += " ," + sender;
123
122
updateStatement->setString (1 , req);
124
- updateStatement->setString (2 , receiver);
123
+ updateStatement->setString (2 , receiver);
125
124
}
126
125
else
127
126
{
128
127
updateStatement->setString (1 , sender);
129
128
updateStatement->setString (2 , receiver);
130
129
}
131
130
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;
140
138
}
141
139
142
140
void sql_addconnect (std::string connectptr)
@@ -151,9 +149,8 @@ void sql_addconnect(std::string connectptr)
151
149
sql::PreparedStatement *insertConnect = con->prepareStatement (classMysql);
152
150
insertConnect->setString (4 , connectptr);
153
151
154
- delete insertConnect, insertConnect = nullptr ;
155
- delete con, con = nullptr ;
156
- delete driver, driver = nullptr ;
152
+ delete insertConnect;
153
+ delete con;
157
154
}
158
155
catch (sql::SQLException &e)
159
156
{
@@ -178,9 +175,8 @@ void sql_addhistory(std::string sender, std::string receiver, std::string messag
178
175
insertData->setString (4 , receiver);
179
176
insertData->executeUpdate ();
180
177
181
- delete insertData, insertData = nullptr ;
182
- delete con, con = nullptr ;
183
- delete driver, driver = nullptr ;
178
+ delete insertData;
179
+ delete con;
184
180
}
185
181
catch (sql::SQLException &e)
186
182
{
@@ -205,29 +201,114 @@ void sql_add(std::string username, std::string passwd, int avatar)
205
201
ptool->setInt (3 , avatar);
206
202
ptool->executeUpdate ();
207
203
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
+ }
212
291
}
213
292
catch (sql::SQLException &e)
214
293
{
215
294
std::cerr << " SQL Exception: " << e.what () << std::endl;
216
295
}
296
+
297
+ return json;
217
298
}
218
299
300
+ /*
219
301
Json::Value get_chat_info(std::string me, std::string who_send_me)
220
302
{
221
303
Json::Value json;
304
+ std::string* send = new std::string[2]{me, who_send_me};
222
305
223
306
try
224
- {
307
+ {
225
308
sql::mysql::MySQL_Driver *driver = sql::mysql::get_mysql_driver_instance();
226
309
sql::Connection *con = driver->connect("tcp://8.130.48.157:3306", "root", "abc.123");
227
310
con->setSchema("flypen");
228
311
229
- std::string* send = new std::string[2 ]{me, who_send_me};
230
-
231
312
for (int i = 0; i < 2; i++)
232
313
{
233
314
if (!send[i].empty())
@@ -238,53 +319,56 @@ Json::Value get_chat_info(std::string me, std::string who_send_me)
238
319
239
320
sql::ResultSet *res = prepStmt->executeQuery();
240
321
322
+ // this
241
323
if (res->next())
242
324
{
243
325
Json::Value user;
244
326
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"};
246
330
247
331
for(int i = 0; i < 2; i++)
248
332
{
249
- who[i] = res->getString (who[i]);
333
+ FR[i] = res->getString(who[i]);
334
+ Json::Value array(Json::arrayValue); // ???
250
335
251
- Json::Value array (Json::arrayValue);
252
- std::stringstream strStream (who[i]);
253
- std::string token;
336
+ std::stringstream strStream(FR[i]);
254
337
255
338
while(std::getline(strStream, token, ','))
256
339
{
257
340
Json::Value aVisit;
258
341
aVisit["username"] = token;
259
342
260
343
std::string sql = "SELECT * FROM users WHERE username = ? LIMIT 1";
344
+ sql::PreparedStatement *prepStmt = con->prepareStatement(sql);
261
345
prepStmt->setString(1, token);
262
346
sql::ResultSet *res = prepStmt->executeQuery();
263
347
264
348
if(res->next())
265
349
aVisit["avatar"] = res->getInt("avatar"); // 假设avatar统一为4
266
-
350
+
267
351
array.append(aVisit);
268
- user[who[i]] = array;
269
352
}
353
+ user[who[i]] = array;
270
354
}
271
355
user["avatar"] = avatar;
272
356
273
357
Json::StreamWriterBuilder builder;
274
358
std::string userJson = Json::writeString(builder, user);
275
359
json[send[i]] = user;
276
-
277
- delete who, who = nullptr ;
360
+
361
+ delete FR;
362
+ delete who;
278
363
}
279
364
280
- delete res, res = nullptr ;
281
- delete prepStmt, prepStmt = nullptr ;
365
+ delete res;
366
+ delete prepStmt;
282
367
}
283
368
}
284
369
285
- delete send, send = nullptr ;
286
- delete con, con = nullptr ;
287
- delete driver, driver = nullptr ;
370
+ delete send;
371
+ delete con;
288
372
}
289
373
catch (sql::SQLException &e)
290
374
{
@@ -293,6 +377,7 @@ Json::Value get_chat_info(std::string me, std::string who_send_me)
293
377
294
378
return json;
295
379
}
380
+ */
296
381
297
382
bool sql_check (std::string user, std::string passwd)
298
383
{
@@ -324,10 +409,9 @@ bool sql_check(std::string user, std::string passwd)
324
409
result = false ;
325
410
}
326
411
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;
331
415
}
332
416
catch (sql::SQLException &e)
333
417
{
@@ -340,9 +424,7 @@ bool sql_check(std::string user, std::string passwd)
340
424
341
425
Json::Value sql_find_my_msg (std::string me)
342
426
{
343
- Json::Value result;
344
427
std::cout << " login user: " << me << std::endl;
345
-
346
428
try
347
429
{
348
430
sql::mysql::MySQL_Driver *driver = sql::mysql::get_mysql_driver_instance ();
@@ -354,7 +436,7 @@ Json::Value sql_find_my_msg(std::string me)
354
436
std::string sqlFind = " SELECT * FROM chat WHERE sender = ? OR receiver = ?" ;
355
437
sql::PreparedStatement *prepStmt = con->prepareStatement (sqlFind);
356
438
prepStmt->setString (1 , me);
357
- prepStmt->setString (2 , me);
439
+ prepStmt->setString (2 , me);
358
440
sql::ResultSet *res = prepStmt->executeQuery ();
359
441
360
442
// =================== find end and update begin
@@ -364,10 +446,11 @@ Json::Value sql_find_my_msg(std::string me)
364
446
365
447
// =================== update end
366
448
449
+ Json::Value result;
367
450
std::string sender;
368
451
std::string receiver;
369
452
std::map<std::string, Json::Value> sender_messages;
370
-
453
+
371
454
while (res->next ())
372
455
{
373
456
Json::Value item;
@@ -396,16 +479,15 @@ Json::Value sql_find_my_msg(std::string me)
396
479
for (auto &x : sender_messages)
397
480
result[x.first ] = x.second ;
398
481
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;
403
487
}
404
488
catch (sql::SQLException &e)
405
489
{
406
490
std::cerr << " SQL Exception: " << e.what () << std::endl;
407
- result = (Json::Value) " error" ;
491
+ return " error" ;
408
492
}
409
-
410
- return result;
411
493
}
0 commit comments