diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6795018 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.vscode/* +*.php +*.exe +*.db diff --git a/client.cpp b/client.cpp new file mode 100644 index 0000000..63f2aee --- /dev/null +++ b/client.cpp @@ -0,0 +1,32 @@ +#include "jscore.h" +#include "stdio.h" + +int main(int argc, char const *argv[]) { + + // Per a agafar la tabla de puntuacions de "coffee" + jscore::initOnlineScore("test"); + + + // Una vegada recuperada la tabla de puntuacions (ens la torna ordenada per max puntuació, el primer el max)... + + // Per a agafar el nombre usuaris en la tabla + int numUsers = jscore::getNumUsers(); + for (int i=0;i +#include +#include +//#include +//#include +//#include +#include +#include +#include + +namespace jscore { + + struct user { + std::string name; + int points; + }; + std::vector score; + + #define bzero(b,len) (memset((b), '\0', (len)), (void) 0) + using namespace std; + int sock; + struct sockaddr_in client; + int PORT = 9911; + const char *HOST = "jaildoctor.duckdns.org"; + WSADATA WsaData; + + std::string sendRequest(const std::string request) { + int ret = WSAStartup(0x101,&WsaData); + if (ret != 0) return 0; + + struct hostent * host = gethostbyname(HOST); + + if ( (host == NULL) || (host->h_addr == NULL) ) { + printf("Error retrieving DNS information.\n"); + return ""; + } + + bzero(&client, sizeof(client)); + client.sin_family = AF_INET; + client.sin_port = htons( PORT ); + memcpy(&client.sin_addr, host->h_addr, host->h_length); + + sock = socket(AF_INET, SOCK_STREAM, 0); + + if (sock < 0) { + printf("Error creating socket.\n"); + return ""; + } + + if ( connect(sock, (struct sockaddr *)&client, sizeof(client)) < 0 ) { + close(sock); + printf("Could not connect\n"); + return ""; + } + + std::string r = request + " HTTP/1.1\r\nHost: "+HOST+"\r\nConnection: close\r\n\r\n\r\n"; + if (send(sock, r.c_str(), r.length(), 0) != (int)r.length()) { + printf("Error sending request.\n"); + return ""; + } + + char cur; + char start[5]="\r\n\r\n"; + int pos = 0; + while ( recv(sock, &cur, 1,0) > 0 ) { + if (cur==start[pos]) { pos++; if (pos == 4) break; } else { pos = 0; } + } + + char buffer[1024]; buffer[0]=0; pos=0; + while ( recv(sock, &cur, 1,0) > 0 ) { + buffer[pos] = cur; + pos++; + } + WSACleanup(); + buffer[pos]=0; + return buffer; + } + + const bool initOnlineScore(std::string game) { + std::string strbuff = sendRequest("GET /score-list.php?game=" + game); + + user u; + char buffer[1024]; + strcpy(buffer, strbuff.c_str()); + char *str = buffer; + char *p = str; + score.clear(); + while (*p!=0) { + while (*p!=',') {p++;} + *p=0; u.name = str; p++; str=p; + while (*p!='\n') {p++;} + *p=0; u.points = atoi(str); p++; str=p; + score.push_back(u); + } + } + + const int getNumUsers() { + return score.size(); + } + std::string getUserName(const int index) { + return score[index].name; + } + const int getPoints(const int index) { + return score[index].points; + } + + const bool updateUserPoints(std::string game, std::string user, const int points) { + char dst[255]; + std::string strbuff = sendRequest("GET /score-update.php?game=" + game + "&user=" + user + "&points=" + itoa(points, dst, 10)); + initOnlineScore(game); + } + + std::string getUserData(std::string game, std::string user) { + return sendRequest("GET /getuserdata.php?game=" + game + "&user=" + user); + } + + void setUserData(std::string game, std::string user, std::string data) { + sendRequest("GET /setuserdata.php?game=" + game + "&user=" + user + "&data=" + data); + } + +}; + diff --git a/jscore.h b/jscore.h new file mode 100644 index 0000000..089d7b5 --- /dev/null +++ b/jscore.h @@ -0,0 +1,14 @@ +#pragma once +#include + +namespace jscore { + const bool initOnlineScore(std::string game); + const int getNumUsers(); + std::string getUserName(const int index); + const int getPoints(const int index); + + const bool updateUserPoints(std::string game, std::string user, const int points); + std::string getUserData(std::string game, std::string user); + void setUserData(std::string game, std::string user, std::string data); +}; +