Beispiel #1
0
static void network_client_connect_trap(WORD addr, void *data)
{
    BYTE *buf;
    size_t buf_size;
    BYTE recv_buf4[4];
    event_list_state_t *settings_list;

    /* Set proper settings */
    if (resources_set_event_safe() < 0)
        ui_error("Warning! Failed to set netplay-safe settings.");

    /* Receive settings that need to be same as on server */
    if (network_recv_buffer(network_socket, recv_buf4, 4) < 0)
        return;

    buf_size = (size_t)util_le_buf4_to_int(recv_buf4);
    buf = lib_malloc(buf_size);

    if (network_recv_buffer(network_socket, buf, buf_size) < 0)
        return;

    settings_list = network_create_event_list(buf);
    lib_free(buf);

    event_playback_event_list(settings_list);

    event_clear_list(settings_list);
    lib_free(settings_list);

    /* read the snapshot */
    if (machine_read_snapshot(snapshotfilename, 0) != 0) {
#ifdef HAS_TRANSLATION
        ui_error(translate_text(IDGS_CANNOT_OPEN_SNAPSHOT_FILE_S), snapshotfilename);
#else
        ui_error(_("Cannot open snapshot file %s"), snapshotfilename);
#endif
        lib_free(snapshotfilename);
        return;
    }

    current_send_frame = 0;
    last_received_frame = 0;

    network_mode = NETWORK_CLIENT;

    network_test_delay();
    lib_free(snapshotfilename);
}
Beispiel #2
0
int network_start_server(void)
{
    vice_network_socket_address_t * server_addr = NULL;
    int ret = -1;

    do {
        if (network_mode != NETWORK_IDLE)
            break;

        server_addr = vice_network_address_generate(server_bind_address, server_port);
        if ( ! server_addr ) {
            break;
        }

        listen_socket = vice_network_server(server_addr);
        if ( ! listen_socket ) {
            break;
        }

        /* Set proper settings */
        if (resources_set_event_safe() < 0) {
            ui_error("Warning! Failed to set netplay-safe settings.");
        }

        network_mode = NETWORK_SERVER;

        vsync_suspend_speed_eval();
        ui_display_statustext(translate_text(IDGS_SERVER_IS_WAITING_FOR_CLIENT), 1);

        ret = 0;
    } while (0);

    if (server_addr) {
        vice_network_address_close(server_addr);
    }

    return ret;
} 
Beispiel #3
0
int network_start_server(void)
{
#ifdef HAVE_IPV6
    struct sockaddr_in6 server_addr6;
#endif
    int return_value;
    struct sockaddr_in server_addr;

    if (network_init() < 0)
        return -1;

    if (network_mode != NETWORK_IDLE)
        return -1;

#ifdef HAVE_IPV6
    if (netplay_ipv6) {
        bzero((char*)&server_addr6, sizeof(struct sockaddr_in6));
        server_addr6.sin6_port = htons(server_port);
        server_addr6.sin6_family = PF_INET6;
        server_addr6.sin6_addr=in6addr_any;
    } else {
#endif
    server_addr.sin_port = htons(server_port);
    server_addr.sin_addr.s_addr = htonl(0);
    server_addr.sin_family = PF_INET;
#ifndef MINIX_SUPPORT
    memset(server_addr.sin_zero, 0, sizeof(server_addr.sin_zero));
#endif
#ifdef HAVE_IPV6
    }
    if (netplay_ipv6)
        listen_socket = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP);
    else
#endif
    listen_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (listen_socket == INVALID_SOCKET)
        return -1;

#ifdef HAVE_IPV6
    if (netplay_ipv6)
        return_value=bind(listen_socket, (struct sockaddr *)&server_addr6, sizeof(server_addr6));
    else
#endif
    return_value=bind(listen_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));

    if (return_value < 0) {
        closesocket(listen_socket);
        return -1;
    }

    if (listen(listen_socket, 2) < 0) {
        closesocket(listen_socket);
        return -1;
    }

    /* Set proper settings */
    if (resources_set_event_safe() < 0)
        ui_error("Warning! Failed to set netplay-safe settings.");

    network_mode = NETWORK_SERVER;

    vsync_suspend_speed_eval();
#ifdef HAS_TRANSLATION
    ui_display_statustext(translate_text(IDGS_SERVER_IS_WAITING_FOR_CLIENT), 1);
#else
    ui_display_statustext(_("Server is waiting for a client..."), 1);
#endif
    return 0;
}