diff --git a/myserver.c b/myserver.c index b5535e0..8686462 100755 --- a/myserver.c +++ b/myserver.c @@ -14,11 +14,17 @@ struct msgNumber { int index; }; +struct msgNumberArr +{ + int lenght; + int index[1024]; +}; -int writeUsersMessages(char username[1024], struct msgNumber *msgNumbers) +int writeUsersMessages(char username[1024], int *msgNumbs, int lenght) { FILE *filePointer; - strcat(username, ".bin"); + printf("Start writeUsersMessages() username: %s", username); + //strcat(username, ".bin"); filePointer = fopen(username, "wb"); /**/ if (!filePointer) @@ -26,16 +32,20 @@ int writeUsersMessages(char username[1024], struct msgNumber *msgNumbers) printf("\x1B[31mUser Message Speicher konnte nicht geschrieben werden!\x1B[37m\n"); return 0; } - for (int i = 0; i < sizeof(msgNumbers) / sizeof(struct msgNumber); i++) + struct msgNumberArr msgNumberStruct; + msgNumberStruct.lenght = lenght; + for (int i = 0; i < lenght; i++) { - printf("MSG NUMMBER IN writeUserMessages(): %d\n", msgNumbers[i].index); - fread(&msgNumbers[i], sizeof(struct msgNumber), 1, filePointer); + printf("MSG NUMMBER IN writeUserMessages(): %d\n", msgNumbs[i]); + msgNumberStruct.index[i] = msgNumbs[i]; } + fwrite(&msgNumberStruct, sizeof(struct msgNumberArr), 1, filePointer); + free(msgNumbs); fclose(filePointer); return 1; } -int *getUserMessages(char username[1024]) +struct msgNumberArr getUserMessages(char username[1024]) { FILE *filePointer; strcat(username, ".bin"); @@ -44,59 +54,66 @@ int *getUserMessages(char username[1024]) if (!filePointer) { printf("\x1B[31User Message Speicher konnte nicht gelesen werden!\x1B[37m\n"); - return 0; + struct msgNumberArr nullstruct; + nullstruct.lenght = 0; + return nullstruct; } int i = 0; - struct msgNumber msgNumbers; - int *msgNumberArr; - printf("Vorm while\n"); + struct msgNumberArr msgNumbersStruct; + + //int msgNumberArr[1024]; + + //printf("Vorm while\n"); //while(!feof(filePointer)) - while (fread(&msgNumbers, sizeof(struct msgNumber), 1, filePointer)) - { - printf("Im while\n"); - //fread(&msgNumbers[i], sizeof(struct msgNumber),1, filePointer); - printf("Nach dem fread()"); - msgNumberArr[i] = msgNumbers.index; - printf("MSG NUMMBER IN getUserMessages(): %d\n", msgNumberArr[i]); - i += 1; - } - printf("Nach dem while\n"); + //while (fread(&msgNumbers, sizeof(struct msgNumber), 1, filePointer)) + //{ + //printf("Im while\n"); + + fread(&msgNumbersStruct, sizeof(struct msgNumberArr),1, filePointer); + + //} + //printf("Nach dem while\n"); fclose(filePointer); - return msgNumberArr; + return msgNumbersStruct; } int addUserMessage(char username[1024], int msgNumber) { - printf("Vor getUserMessages() in addUserMessage(), username: %s, msgNumber: %d\n", username, msgNumber); - int *msgNumbers = getUserMessages(username); + printf("addUserMessage(), username: %s, msgNumber: %d\n", username, msgNumber); + int msgNumbers[1024]; + struct msgNumberArr msgNumbersStruct = getUserMessages(username); + printf("msgnumberstruct lenght: %d", msgNumbersStruct.lenght); + for (int i = 0; i < msgNumbersStruct.lenght; i++) + { + msgNumbers[i] = msgNumbersStruct.index[i]; + printf("MSG NUMMBER IN addUserMessage(): %d\n", msgNumbers[i]); + } printf("Nach getUserMessages()\n"); int result; - if (!msgNumbers) + if (msgNumbersStruct.lenght == 0) { printf("Es wurden keine vorherigen Messages des Users gefunden!\n"); - struct msgNumber newMsgNumber; - newMsgNumber.index = msgNumber; - - struct msgNumber msgNumberStruct[1024] = {newMsgNumber}; - result = writeUsersMessages(username, msgNumberStruct); + int *msgNumbs = malloc(1024); + msgNumbs[0] = msgNumber; + printf("Username in addUserMessage(): %s", username); + result = writeUsersMessages(username, msgNumbs, 1); } else { printf("Es wurden vorherige Messages des Users gefunden, füge neue Message an alte Messages an!\n"); - struct msgNumber newMsgNumber; - newMsgNumber.index = msgNumber; - - struct msgNumber *msgNumberStruct; - msgNumberStruct[0] = newMsgNumber; - for (int i = 1; i < sizeof(msgNumbers) / sizeof(struct msgNumber); i++) + int nMsgs = msgNumbersStruct.lenght; + int *newNumbers = malloc(1024); + newNumbers[0] = msgNumber; + for (int i = 1; i <= nMsgs; i++) { - struct msgNumber j; - j.index = msgNumbers[i - 1]; - msgNumberStruct[i] = j; + printf("addUserMessage() msg number old: %d", msgNumbers[i-1]); + newNumbers[i] = msgNumbers[i-1]; } - - result = writeUsersMessages(username, msgNumberStruct); + printf("Vor dem writeUsersMessages() username: %s", username); + result = writeUsersMessages(username, newNumbers, nMsgs + 1); + printf("Nach dem writeUsersMessages() result: %d", result); } + //free(msgNumbers); if (result == 0) { printf("\x1B[31mMessage konnte wegen eines fehlers, in writeUserMessages(), nicht gespeichert werden!\x1B[37m\n"); @@ -311,7 +328,7 @@ int main(int argc, char **argv) printf("->SEND:\x1B[33m %s\x1B[37m\n", bufferString); bufferString[0] = '\0'; buffer[0] = '\0'; -fflush(stdout); + fflush(stdout); break; case 1: last += 1; @@ -319,10 +336,11 @@ fflush(stdout); printf("->SEND->Sender wurde eingegeben:\x1B[33m %s\x1B[37m\n", bufferString); char sender[1024]; strcat(sender, bufferString); + recToSave.sender = strdup(bufferString); bufferString[0] = '\0'; buffer[0] = '\0'; -fflush(stdout); - recToSave.sender = sender; + fflush(stdout); + //recToSave.sender = sender; break; case 2: last += 1; @@ -330,10 +348,11 @@ fflush(stdout); printf("->SEND->Empfänger wurde eingegeben:\x1B[33m %s\x1B[37m\n", bufferString); char empf[1024]; strcat(empf, bufferString); - recToSave.receiver = empf; + recToSave.receiver = strdup(bufferString); + //recToSave.receiver = empf; bufferString[0] = '\0'; buffer[0] = '\0'; -fflush(stdout); + fflush(stdout); break; case 3: last += 1; @@ -341,7 +360,8 @@ fflush(stdout); printf("->SEND->Betreff wurde eingegeben:\x1B[33m %s\x1B[37m\n", bufferString); char betreff[1024]; strcat(betreff, bufferString); - recToSave.betreff = betreff; + recToSave.betreff = strdup(bufferString); + //recToSave.betreff = betreff; bufferString[0] = '\0'; buffer[0] = '\0'; break; @@ -352,11 +372,12 @@ fflush(stdout); printf("->SEND->Nachricht wurde eingegeben:\x1B[33m %s\x1B[37m\n", bufferString); char msg[1024]; strcat(msg, bufferString); - recToSave.msg = msg; + recToSave.msg = strdup(bufferString); + //recToSave.msg = msg; printf("BUFFER STRING: %s", bufferString); bufferString[0] = '\0'; buffer[0] = '\0'; -fflush(stdout); + fflush(stdout); printf("Sender: %s, Empf: %s, Betreff: %s, MSG: %s", recToSave.sender, recToSave.receiver, recToSave.betreff, recToSave.msg); int returnWrite = writeToFile(recToSave.sender, recToSave.betreff, recToSave.receiver, recToSave.msg); if (returnWrite == 0)