/** Remove a user from the users list. @param event The mouse click event on the treeview. */ void misc_callback_remove_user(GdkEventButton *event) { #ifdef DEBUG printf("misc_callback_remove_user\n"); #endif GtkTreeView *treeview_users = GTK_TREE_VIEW(lookup_widget(window.startup, "treeview_users")); GtkTreeView *treeview_startup = GTK_TREE_VIEW(lookup_widget(window.startup, "treeview_startup")); if(!treeview_helper_select_row(treeview_users, event)) return; user_remove(treeview_helper_get_index(treeview_users, 0) - 1, FALSE); treeview_show_users(treeview_users); treeview_show_team_list(treeview_startup, FALSE, FALSE); if(users->len == 0) { gtk_widget_set_sensitive(lookup_widget(window.startup, "team_selection_ok"), FALSE); gtk_widget_set_sensitive(lookup_widget(window.startup, "combo_country"), TRUE); } }
G_MODULE_EXPORT void on_button_offer_cancel_clicked (GtkButton *button, gpointer user_data) { #ifdef DEBUG printf("on_button_offer_cancel_clicked\n"); #endif if(stat2 != STATUS_JOB_OFFER_SUCCESS && stat2 != STATUS_JOB_EXCHANGE_SHOW_TEAM) { if(users->len == 1) main_exit_program(EXIT_USER_FIRED, NULL); else { user_remove(cur_user, TRUE); cur_user = 0; } } window_destroy(&window.job_offer); if(stat0 != STATUS_SHOW_JOB_EXCHANGE) { stat0 = STATUS_MAIN; game_gui_show_main(); } }
G_MODULE_EXPORT void on_button_yesno_yes_clicked (GtkButton *button, gpointer user_data) { #ifdef DEBUG printf("on_button_yesno_yes_clicked\n"); #endif window_destroy(&window.yesno); setsav0; switch(stat1) { default: debug_print_message("on_button_yesno_yes_clicked: unknown status %d\n", stat1); break; case STATUS_PAY_LOAN: on_automatic_loan_repayment_activate(NULL, NULL); break; case STATUS_FIRE_PLAYER: player_remove_from_team(current_user.tm, stat2); current_user.money -= stat3; current_user.money_out[1][MON_OUT_COMPENSATIONS] -= stat3; treeview_show_user_player_list(); game_gui_set_main_window_header(); break; case STATUS_USER_MANAGEMENT: user_remove(stat2, TRUE); treeview_show_users( GTK_TREE_VIEW(lookup_widget(window.user_management, "treeview_user_management_users"))); treeview_show_team_list( GTK_TREE_VIEW(lookup_widget(window.user_management, "treeview_user_management_teams")), FALSE, FALSE); break; case STATUS_QUERY_UNFIT: load_save_autosave(); callback_show_next_live_game(); break; case STATUS_QUERY_QUIT: main_exit_program(EXIT_OK, NULL); break; case STATUS_QUERY_USER_NO_TURN: load_save_autosave(); callback_show_next_live_game(); break; case STATUS_QUERY_KICK_YOUTH: free_player(&g_array_index(current_user.youth_academy.players, Player, selected_row)); g_array_remove_index(current_user.youth_academy.players, selected_row); on_menu_show_youth_academy_activate(NULL, NULL); selected_row = -1; break; } if(stat4 == STATUS_SHOW_EVENT) user_event_show_next(); }
void* server_conn(void* t_data) { int connfd = ((thread_t*)t_data)->fd; char* salt = ((thread_t*)t_data)->salt; char* ip = ((thread_t*)t_data)->ip; uint16_t port = ((thread_t*)t_data)->port; user_t *u; fd_set input; char buffer[100]; int pos = 0, auth = 0; free(t_data); snprintf(buffer, sizeof(buffer), "%s\n", salt); send(connfd, buffer, strlen(buffer), MSG_NOSIGNAL); if(recv(connfd, buffer, 41, MSG_NOSIGNAL) == 41) { buffer[40] = 0; auth = auth_hash(salt, server.password, buffer); } free(salt); if(!auth && !server.guest) { snprintf(buffer, sizeof(buffer), "a0\n"); send(connfd, buffer, strlen(buffer), MSG_NOSIGNAL); #ifdef __WIN32__ Sleep(2000); #endif socket_close(connfd); free(ip); return NULL; } if(!auth && server.guest) { snprintf(buffer, sizeof(buffer), "a1\n"); send(connfd, buffer, strlen(buffer), MSG_NOSIGNAL); } #ifdef __WIN32__ unsigned long on = 1; if (ioctlsocket(connfd, FIONBIO, &on) != NO_ERROR) { server_log(LOG_ERR, "server_conn: ioctlsocket"); free(ip); exit(EXIT_FAILURE); } #else fcntl(connfd, F_SETFL, O_NONBLOCK); #endif server_log(LOG_INFO, "user connected: %s:%u%s", ip, port, (auth ? "" : " (guest)")); if(server.online_auth) { snprintf(buffer, sizeof(buffer), "M%d\nY%d\nT%d\nD%d\nA%d\nF%d\nZ%d\nG%02d\nV%d\nQ%d\nC%d\nI%d,%d\n", server.mode, server.volume, server.freq, server.deemphasis, server.agc, server.filter, server.ant, server.gain, server.daa, server.squelch, server.rotator, server.sampling, server.detector); send(connfd, buffer, strlen(buffer), MSG_NOSIGNAL); } u = user_add(&server, connfd, auth); snprintf(buffer, sizeof(buffer), "o%d,%d\n", server.online_auth, server.online - server.online_auth); msg_send(buffer, strlen(buffer)); FD_ZERO(&input); FD_SET(u->fd, &input); while(select(u->fd+1, &input, NULL, NULL, NULL) > 0) { if(recv(u->fd, &buffer[pos], 1, MSG_NOSIGNAL) <= 0) break; /* If this command is too long to * fit into a buffer, clip it */ if(buffer[pos] != '\n') { if(pos != sizeof(buffer)-1) pos++; continue; } if(buffer[0] == XDR_P_SHUTDOWN) break; if(u->auth) serial_write(buffer, pos+1); pos = 0; } user_remove(&server, u); server_log(LOG_INFO, "user disconnected: %s:%u", ip, port); free(ip); if(server.online) { snprintf(buffer, sizeof(buffer), "o%d,%d\n", server.online_auth, server.online - server.online_auth); msg_send(buffer, strlen(buffer)); } if(!server.online_auth && server.poweroff) { if(server.online) { /* tell unauthenticated users that XDR has been powered off */ sprintf(buffer, "X\n"); msg_send(buffer, strlen(buffer)); } server_log(LOG_INFO, "tuner shutdown"); tuner_reset(); } return NULL; }