Psnuser.c

void psn_shutdown(void) psn_logout(); printf("[PSN] Clean shutdown complete.\n");

if (psn_login("user@example.com", "pass") != 0) fprintf(stderr, "Login failed\n"); return; psnuser.c

const PsnUser *psn_get_current_user(void) if (!g_is_logged_in) return NULL; return &g_current_user; void psn_shutdown(void) psn_logout()

#include "psnuser.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> // Static / internal data static PsnUser g_current_user = 0; static PsnSession g_active_session = 0; static int g_is_logged_in = 0; printf("[PSN] Clean shutdown complete.\n")

typedef struct char friend_id[32]; char online_id[64]; int is_online; PsnFriend; 4.1 Initialize / Shutdown void psn_init(void) memset(&g_current_user, 0, sizeof(PsnUser)); memset(&g_active_session, 0, sizeof(PsnSession)); g_is_logged_in = 0; printf("[PSN] User module initialized.\n");

Then implement psn_login to POST to a local test server. Unit test snippet (using assert) void test_login_logout() psn_init(); assert(psn_login("a@b.com", "1234") == 0); assert(psn_is_session_valid() == 1); psn_logout(); assert(psn_is_session_valid() == 0); psn_shutdown();

// Dummy validation – replace with real HTTP request in production if (strlen(email) < 5 void psn_logout(void) if (!g_is_logged_in) return; // Invalidate token (simulate) memset(&g_active_session, 0, sizeof(PsnSession)); memset(&g_current_user, 0, sizeof(PsnUser)); g_is_logged_in = 0;