From 98209188bd61a96afa36c77654676aa28f1e7521 Mon Sep 17 00:00:00 2001 From: notfound Date: Tue, 9 May 2023 17:10:44 +1000 Subject: [PATCH 1/2] All project --- Database.cpp | 8 +-- Database.h | 12 ++++- Server.cpp | 138 ++++++++++++++++++++++++--------------------------- USERS.txt | 15 +----- main.cpp | 13 ----- 5 files changed, 82 insertions(+), 104 deletions(-) diff --git a/Database.cpp b/Database.cpp index abd3d69..4c39718 100644 --- a/Database.cpp +++ b/Database.cpp @@ -75,11 +75,10 @@ string Database::FindUser(string Login, string Password) { return Buffer; } else if (User.Login == Login and User.Password != Password) { - return "WRONGPASS"; } } - //strcpy(OutputStr, "NOTFOUND"); + return "NOTFOUND"; } @@ -198,9 +197,11 @@ void Database::AddNewReservation(string Type, string Date, string Place, string } string Database::Reserve(string Login, int ReserveIndex) { - if (ReserveIndex > ParsedReservedData.capacity()) { + if (ReserveIndex > AmountOfAllReserved) { + cout << AmountOfAllReserved + 1 << " " << ReserveIndex + 1 << " "; return "NOTFOUND"; } + if (FindUser(Login, "KOCTbILb") != "NOTFOUND") { if (ParsedReservedData[ReserveIndex].User == Login) { return "ALREADY RESERVED"; @@ -212,5 +213,6 @@ string Database::Reserve(string Login, int ReserveIndex) { ReservedDataToFile(); return Login + " SUCCESSFULLY RESERVED " + to_string(ReserveIndex) + " SLOT"; } + cout << 321; return "NOTFOUND"; } diff --git a/Database.h b/Database.h index c044612..3db4b90 100644 --- a/Database.h +++ b/Database.h @@ -1,5 +1,6 @@ #ifndef INFO_SYSTEM_DEDICATED_SERVER_DATABASE_H #define INFO_SYSTEM_DEDICATED_SERVER_DATABASE_H + #include "Utility.h" // Изменяйте так, как вам нужно @@ -29,8 +30,9 @@ class Database { public: static int AmountOfAllUsers; static int AmountOfAllReserved; - static vector ParsedUserData; - static vector ParsedReservedData; + static vector ParsedUserData; + static vector ParsedReservedData; + void AddUserFromString(string Buffer); @@ -42,16 +44,22 @@ class Database { //аня // функция ДОПИСЫВАЕТ в USERS.txt логин, пароль и имя, генерирует айди и прописывает админфлаг 0 static void RegUser(string Login, string Password); + // функция ИЩЕТ внутри USERS.txt переданные логин и пароли, и если находит вовзращает 1, иначе 0 static string FindUser(string Login, string Password); + // вася ваза вазон зонд завал зов ебем азов // Перегрузки удаления информации из базы - удаление по индексу и удаление по Структуре static int DeleteUser(int UserIndex); static void ParseResData(); + static void ReservedDataToFile(); + static int DeleteData(int DataIndex); + static string FindReservedData(string Type, string Date, string Place); + static void AddNewReservation(string Type, string Date, string Place, string User); diff --git a/Server.cpp b/Server.cpp index 9413ded..3087cea 100644 --- a/Server.cpp +++ b/Server.cpp @@ -1,7 +1,7 @@ #include "Server.h" int Server::DeleteIndex; -ADDRINFO* Server::addrResult = NULL; +ADDRINFO *Server::addrResult = NULL; SOCKET Server::ClientSocket = INVALID_SOCKET; SOCKET Server::ListenSocket = INVALID_SOCKET; char Server::SendBuffer[2048]; @@ -41,10 +41,10 @@ int Server::Initialize() { } - if (bind(ListenSocket, addrResult->ai_addr, (int)addrResult->ai_addrlen) == SOCKET_ERROR) { + if (bind(ListenSocket, addrResult->ai_addr, (int) addrResult->ai_addrlen) == SOCKET_ERROR) { //"Bind socket failed"; closesocket(ListenSocket); - ListenSocket = INVALID_SOCKET; + ListenSocket = INVALID_SOCKET; freeaddrinfo(addrResult); WSACleanup(); return -4; @@ -87,11 +87,12 @@ int Server::Listen() { if (Result > 0) { cout << "Recieved: " << recvBuffer << endl; char Message[2048]; - memset(Message, 0, 2048); memset(SendBuffer, 0, 2048); + memset(Message, 0, 2048); + memset(SendBuffer, 0, 2048); //USER DELETE CASE---------------------------------------------------------------------------------------------- - if (recvBuffer[0] == 'U' and recvBuffer[1] == 'D' and recvBuffer[2] == 'E' and recvBuffer[3] == 'L'){ + if (recvBuffer[0] == 'U' and recvBuffer[1] == 'D' and recvBuffer[2] == 'E' and recvBuffer[3] == 'L') { cout << "Initialize deleting by index\n"; if (isdigit(recvBuffer[5]) and isdigit(recvBuffer[6])) { char str[2]; @@ -112,7 +113,7 @@ int Server::Listen() { } //--------------------------------------------------------------------------------------------------------- //USER FIND CASE------------------------------------------------------------------------------------------------ - if (recvBuffer[0] == 'U' and recvBuffer[1] == 'F' and recvBuffer[2] == 'N' and recvBuffer[3] == 'D'){ + if (recvBuffer[0] == 'U' and recvBuffer[1] == 'F' and recvBuffer[2] == 'N' and recvBuffer[3] == 'D') { char sliced_buf[26]; substr(sliced_buf, recvBuffer, 5, 26); string Credentials(sliced_buf); @@ -125,11 +126,11 @@ int Server::Listen() { i++; } cout << '\n' << Login << '\n'; - i+=1; + i += 1; int c = i; i = 0; - while (Credentials[c+i] != '%') { - Password.push_back(Credentials[c+i]); + while (Credentials[c + i] != '%') { + Password.push_back(Credentials[c + i]); i++; } cout << Password << '\n'; @@ -139,7 +140,7 @@ int Server::Listen() { if (Buffer == "WRONGPASS") { strcpy(Message, "WRONGPASS"); cout << Message; - } else if (Buffer == "NOTFOUND") { + } else if (Buffer == "NOTFOUND") { strcpy(Message, "NOTFOUND"); cout << Message; } else { @@ -150,7 +151,7 @@ int Server::Listen() { } //--------------------------------------------------------------------------------------------------------- //USER REGISTRATION CASE----------------------------------------------------------------------------------- - if (recvBuffer[0] == 'U' and recvBuffer[1] == 'R' and recvBuffer[2] == 'E' and recvBuffer[3] == 'G'){ + if (recvBuffer[0] == 'U' and recvBuffer[1] == 'R' and recvBuffer[2] == 'E' and recvBuffer[3] == 'G') { char sliced_buf[25]; string Login; string Password; @@ -159,18 +160,22 @@ int Server::Listen() { cout << Credentials; int i = 0; while (Credentials[i] != '%') { - Login.push_back(Credentials[i]); i++; + Login.push_back(Credentials[i]); + i++; } cout << '\n' << Login << '\n'; - i+=1; int c = i; i = 0; - while (Credentials[c+i] != '%') { - Password.push_back(Credentials[c+i]); i++; + i += 1; + int c = i; + i = 0; + while (Credentials[c + i] != '%') { + Password.push_back(Credentials[c + i]); + i++; } cout << Password << '\n'; string Buffer = Database::FindUser(Login, Password); - if (Buffer == "NOTFOUND") { + if (Buffer == "NOTFOUND") { Database::RegUser(Login, Password); strcpy(Message, "REGISTERED \n"); cout << Message; @@ -182,7 +187,7 @@ int Server::Listen() { //--------------------------------------------------------------------------------------------------------- //DATABASE ADD CASE---------------------------------------------------------------------------------------- //DADD DCLASS%08.05.2024/18:23%12%NONE% - if (recvBuffer[0] == 'D' and recvBuffer[1] == 'A' and recvBuffer[2] == 'D' and recvBuffer[3] == 'D'){ + if (recvBuffer[0] == 'D' and recvBuffer[1] == 'A' and recvBuffer[2] == 'D' and recvBuffer[3] == 'D') { char sliced_buf[40]; substr(sliced_buf, recvBuffer, 5, 45); string ReservedData(sliced_buf); @@ -192,16 +197,11 @@ int Server::Listen() { getline(ss, Date, '%'); getline(ss, Place, '%'); getline(ss, UserLogin, '%'); -// auto i = ReservedData.begin(); -// string Type(i, i+6); i+=7; -// string Date(i, i+16); i+=17; -// string Place(i, i+2); i+=3; -// string UserLogin(i, ReservedData.end()); - cout << Type << ' ' << Date << ' '<< Place << ' '<< UserLogin << '\n'; + cout << Type << ' ' << Date << ' ' << Place << ' ' << UserLogin << '\n'; string Buffer = Database::FindReservedData(Type, Date, Place); - if (Buffer == "NOTFOUND") { + if (Buffer == "NOTFOUND") { Database::AddNewReservation(Type, Date, Place, UserLogin); strcpy(Message, "RESERVATION ADDED \n"); cout << Message; @@ -212,7 +212,7 @@ int Server::Listen() { } //--------------------------------------------------------------------------------------------------------- //DATABASE DEL CASE---------------------------------------------------------------------------------------- - if (recvBuffer[0] == 'D' and recvBuffer[1] == 'D' and recvBuffer[2] == 'E' and recvBuffer[3] == 'L'){ + if (recvBuffer[0] == 'D' and recvBuffer[1] == 'D' and recvBuffer[2] == 'E' and recvBuffer[3] == 'L') { if (isdigit(recvBuffer[5]) and isdigit(recvBuffer[6])) { char str[2]; str[0] = recvBuffer[5]; @@ -233,7 +233,7 @@ int Server::Listen() { } //--------------------------------------------------------------------------------------------------------- //DATABASE FIND CASE--------------------------------------------------------------------------------------- - if (recvBuffer[0] == 'D' and recvBuffer[1] == 'F' and recvBuffer[2] == 'N' and recvBuffer[3] == 'D'){ + if (recvBuffer[0] == 'D' and recvBuffer[1] == 'F' and recvBuffer[2] == 'N' and recvBuffer[3] == 'D') { char sliced_buf[50]; substr(sliced_buf, recvBuffer, 5, 50); string ReservedData(sliced_buf); @@ -243,11 +243,11 @@ int Server::Listen() { getline(ss, Date, '%'); getline(ss, Place, '%'); getline(ss, UserLogin, '%'); - cout << Type << ' ' << Date << ' '<< Place << ' ' << UserLogin << '\n'; + cout << Type << ' ' << Date << ' ' << Place << ' ' << UserLogin << '\n'; string Buffer = Database::FindReservedData(Type, Date, Place); - if (Buffer == "NOTFOUND") { + if (Buffer == "NOTFOUND") { strcpy(Message, "NOTFOUND"); cout << Message; } else { @@ -257,37 +257,24 @@ int Server::Listen() { } //--------------------------------------------------------------------------------------------------------- //RESERVE CASE--------------------------------------------------------------------------------------------- - if (recvBuffer[0] == 'R' and recvBuffer[1] == 'E' and recvBuffer[2] == 'S'){ - char sliced_buf[25]; - string Login, Buffer; - int ReserveIndex; - if (isdigit(recvBuffer[4]) and isdigit(recvBuffer[5])) { - char str[2]; - str[0] = recvBuffer[4]; - str[1] = recvBuffer[5]; - ReserveIndex = atoi(str); + if (recvBuffer[0] == 'R' and recvBuffer[1] == 'E' and recvBuffer[2] == 'S') { + char sliced_buf[20]; + substr(sliced_buf, recvBuffer, 4, 20); + string Buffer(sliced_buf); + cout << Buffer << endl; + string strIndex; + string Login; - substr(sliced_buf, recvBuffer, 5, 20); - string User(sliced_buf); + stringstream ss(Buffer); + ss >> strIndex; + ss >> Login; - int i = 2; - while (User[i] != '%') { - Login.push_back(User[i]); - i++; - } + int ResIndex = atoi(strIndex.c_str()); + Login.erase(std::prev(Login.end())); + cout << atoi(strIndex.c_str()) << endl << Login;; - } else { - ReserveIndex = recvBuffer[4] - 48; - substr(sliced_buf, recvBuffer, 5, 20); - string User(sliced_buf); - - int i = 1; - while (User[i] != '%') { - Login.push_back(User[i]); - i++; - } - } - Buffer = Database::Reserve(Login, ReserveIndex); + + Buffer = Database::Reserve(Login, ResIndex); if (Buffer == "RESERVED BY ANOTHER USER") { cout << "RESERVED BY ANOTHER USER"; @@ -299,17 +286,18 @@ int Server::Listen() { cout << "NOTFOUND"; strcpy(Message, Buffer.c_str()); } else { - cout << Buffer << '\n'; + //cout << Buffer << '\n'; strcpy(Message, Buffer.c_str()); } } //--------------------------------------------------------------------------------------------------------- //GET ALL RESERVATIONS ------------------------------------------------------------------------------------ - if (recvBuffer[0] == 'D' and recvBuffer[1] == 'A' and recvBuffer[2] == 'L' and recvBuffer[3] == 'L'){ + if (recvBuffer[0] == 'D' and recvBuffer[1] == 'A' and recvBuffer[2] == 'L' and recvBuffer[3] == 'L') { string Buffer; - for (auto &ReservedData : Database::ParsedReservedData) { - Buffer += (to_string(ReservedData.Index) + ReservedData.Type + ReservedData.Date + ReservedData.Place + ReservedData.User + "\n"); + for (auto &ReservedData: Database::ParsedReservedData) { + Buffer += (to_string(ReservedData.Index) + ReservedData.Type + ReservedData.Date + + ReservedData.Place + ReservedData.User + "\n"); } strcpy(Message, Buffer.c_str()); cout << Message; @@ -317,9 +305,9 @@ int Server::Listen() { //--------------------------------------------------------------------------------------------------------- //GET ALL USERS-------------------------------------------------------------------------------------------- - if (recvBuffer[0] == 'U' and recvBuffer[1] == 'A' and recvBuffer[2] == 'L' and recvBuffer[3] == 'L'){ + if (recvBuffer[0] == 'U' and recvBuffer[1] == 'A' and recvBuffer[2] == 'L' and recvBuffer[3] == 'L') { string AllUserData; - for (auto &UserData : Database::ParsedUserData) { + for (auto &UserData: Database::ParsedUserData) { AllUserData += (to_string(UserData.Index) + UserData.Login + \ UserData.Password + UserData.USERID + to_string(UserData.AdminFlag) + "\n"); } @@ -328,20 +316,21 @@ int Server::Listen() { } //GET ALL AVAILABLE RESERVATIONS -------------------------------------------------------------------------- - if (recvBuffer[0] == 'A' and recvBuffer[1] == 'A' and recvBuffer[2] == 'L' and recvBuffer[3] == 'L'){ + if (recvBuffer[0] == 'A' and recvBuffer[1] == 'A' and recvBuffer[2] == 'L' and recvBuffer[3] == 'L') { string AllAvailableRes; - for (auto &ResData : Database::ParsedReservedData) { + for (auto &ResData: Database::ParsedReservedData) { if (ResData.User == "NONE") { - AllAvailableRes += (to_string(ResData.Index) + " " + ResData.Type + " " + ResData.Date +\ + AllAvailableRes += (to_string(ResData.Index) + " " + ResData.Type + " " + ResData.Date + \ " " + ResData.Place + " " + ResData.User + '\n'); } } + cout << AllAvailableRes; strcpy(Message, AllAvailableRes.c_str()); cout << Message; } //--------------------------------------------------------------------------------------------------------- - if (recvBuffer[0] == 'D' and recvBuffer[1] == 'F' and recvBuffer[2] == 'F' and recvBuffer[3] == 'R'){ + if (recvBuffer[0] == 'D' and recvBuffer[1] == 'F' and recvBuffer[2] == 'F' and recvBuffer[3] == 'R') { char sliced_buf[25]; substr(sliced_buf, recvBuffer, 5, 12); @@ -357,20 +346,23 @@ int Server::Listen() { string AllUserRes; - for (auto &ResData : Database::ParsedReservedData) { + for (auto &ResData: Database::ParsedReservedData) { if (ResData.User == Login) { - AllUserRes += (to_string(ResData.Index) + ResData.Type + ResData.Date + ResData.Place + ResData.User + '\n'); + AllUserRes += (to_string(ResData.Index) + ResData.Type + ResData.Date + ResData.Place + + ResData.User + '\n'); } } - - strcpy(Message, AllUserRes.c_str()); - cout << Message; + if (AllUserRes.empty()) { + strcpy(Message, "empty"); + } else { + strcpy(Message, AllUserRes.c_str()); + cout << Message; + } } - strcpy(SendBuffer, Message); - Result = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0); + Result = send(ClientSocket, SendBuffer, (int) strlen(SendBuffer), 0); memset(recvBuffer, 0, 512); memset(SendBuffer, 0, 2048); memset(Message, 0, 2048); diff --git a/USERS.txt b/USERS.txt index 77d3482..696cf2f 100644 --- a/USERS.txt +++ b/USERS.txt @@ -1,16 +1,5 @@ -15 +2 0 Admin Pass ID000 1 1 User Pass ID001 0 2 LoginTest PassTest ID002 0 -3 ABOBA SKRILLEX ID003 0 -4 ABOBUS skibidi ID004 0 -5 kakaha boba ID005 0 -6 stupid sikiwaka ID006 0 -7 000000000 000000000 ID007 0 -8 awdad a ID008 0 -9 awdawd a ID009 0 -10 awdawdaw a ID010 0 -12 awdawdwr d ID002 0 -13 awcccc c ID003 0 -14 abbbb abbbb ID014 0 -15 abu abu ID015 0 + diff --git a/main.cpp b/main.cpp index 47df6b0..ffd3935 100644 --- a/main.cpp +++ b/main.cpp @@ -30,24 +30,11 @@ */ int main() { - Database::ParseUserData(); Database::ParseResData(); - - //Database::DeleteData(3); - //Database::AddNewReservation("ZCLASS", "08.05.2023/18:44", "33", "NONE"); - Server::Initialize(); int RecvCommand = Server::Listen(); - //cout << Database::FindUser("Admin", "PassWE3FGD"); - - -// for (auto i : Database::ParsedReservedData) { -// cout << i.Index << i.Type << i.Date << i.Place << i.User <<'\n'; -// } - int a; cin >> a; - return 0; } From 95a9d5306c99a1d111522e1058ca0e268bed382a Mon Sep 17 00:00:00 2001 From: notfound Date: Tue, 9 May 2023 18:25:46 +1000 Subject: [PATCH 2/2] chto to --- Server.cpp | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/Server.cpp b/Server.cpp index 3087cea..9b560d6 100644 --- a/Server.cpp +++ b/Server.cpp @@ -117,7 +117,6 @@ int Server::Listen() { char sliced_buf[26]; substr(sliced_buf, recvBuffer, 5, 26); string Credentials(sliced_buf); - cout << Credentials; string Login; string Password; int i = 0; @@ -125,7 +124,6 @@ int Server::Listen() { Login.push_back(Credentials[i]); i++; } - cout << '\n' << Login << '\n'; i += 1; int c = i; i = 0; @@ -133,20 +131,17 @@ int Server::Listen() { Password.push_back(Credentials[c + i]); i++; } - cout << Password << '\n'; + cout << "Received login: " << Login << " Received password: " << Password << '\n'; + string Buffer = Database::FindUser(Login, Password); if (Buffer == "WRONGPASS") { strcpy(Message, "WRONGPASS"); - cout << Message; } else if (Buffer == "NOTFOUND") { strcpy(Message, "NOTFOUND"); - cout << Message; } else { - strcpy(Message, Buffer.c_str()); - cout << Message; } } //--------------------------------------------------------------------------------------------------------- @@ -157,13 +152,11 @@ int Server::Listen() { string Password; substr(sliced_buf, recvBuffer, 5, 25); string Credentials(sliced_buf); - cout << Credentials; int i = 0; while (Credentials[i] != '%') { Login.push_back(Credentials[i]); i++; } - cout << '\n' << Login << '\n'; i += 1; int c = i; i = 0; @@ -171,17 +164,15 @@ int Server::Listen() { Password.push_back(Credentials[c + i]); i++; } - cout << Password << '\n'; + cout << "Received login: " << Login << " Received password: " << Password << '\n'; string Buffer = Database::FindUser(Login, Password); if (Buffer == "NOTFOUND") { Database::RegUser(Login, Password); strcpy(Message, "REGISTERED \n"); - cout << Message; } else { strcpy(Message, "Username is taken"); - cout << Message << '\n'; } } //--------------------------------------------------------------------------------------------------------- @@ -204,10 +195,8 @@ int Server::Listen() { if (Buffer == "NOTFOUND") { Database::AddNewReservation(Type, Date, Place, UserLogin); strcpy(Message, "RESERVATION ADDED \n"); - cout << Message; } else { strcpy(Message, "This reservation is already exist"); - cout << Message << '\n'; } } //--------------------------------------------------------------------------------------------------------- @@ -356,12 +345,12 @@ int Server::Listen() { strcpy(Message, "empty"); } else { strcpy(Message, AllUserRes.c_str()); - cout << Message; } } - + cout << Message << endl; strcpy(SendBuffer, Message); + Result = send(ClientSocket, SendBuffer, (int) strlen(SendBuffer), 0); memset(recvBuffer, 0, 512); memset(SendBuffer, 0, 2048);