Пример #1
0
/** 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);
    }
}
Пример #2
0
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();
    }
}
Пример #3
0
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();
}
Пример #4
0
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;
}