static void network_hook_connected_send(void) { BYTE *local_event_buf = NULL; unsigned int send_len; BYTE send_len4[4]; /* create and send current event buffer */ network_event_record(EVENT_LIST_END, NULL, 0); send_len = network_create_event_buffer(&local_event_buf, &(frame_event_list[current_frame])); #ifdef NETWORK_DEBUG t1 = vsyncarch_gettime(); #endif util_int_to_le_buf4(send_len4, (int)send_len); if (network_send_buffer(network_socket, send_len4, 4) < 0 || network_send_buffer(network_socket, local_event_buf, send_len) < 0) { ui_display_statustext(translate_text(IDGS_REMOTE_HOST_DISCONNECTED), 1); network_disconnect(); } #ifdef NETWORK_DEBUG t2 = vsyncarch_gettime(); #endif lib_free(local_event_buf); }
static void network_server_connect_trap(WORD addr, void *data) { FILE *f; BYTE *buf; size_t buf_size; BYTE send_size4[4]; long i; event_list_state_t settings_list; vsync_suspend_speed_eval(); /* Create snapshot and send it */ snapshotfilename = archdep_tmpnam(); if (machine_write_snapshot(snapshotfilename, 1, 1, 0) == 0) { f = fopen(snapshotfilename, MODE_READ); if (f == NULL) { #ifdef HAS_TRANSLATION ui_error(translate_text(IDGS_CANNOT_LOAD_SNAPSHOT_TRANSFER)); #else ui_error(_("Cannot load snapshot file for transfer")); #endif lib_free(snapshotfilename); return; } buf_size = util_file_length(f); buf = lib_malloc(buf_size); fread(buf, 1, buf_size, f); fclose(f); #ifdef HAS_TRANSLATION ui_display_statustext(translate_text(IDGS_SENDING_SNAPSHOT_TO_CLIENT), 0); #else ui_display_statustext(_("Sending snapshot to client..."), 0); #endif util_int_to_le_buf4(send_size4, (int)buf_size); network_send_buffer(network_socket, send_size4, 4); i = network_send_buffer(network_socket, buf, (int)buf_size); lib_free(buf); if (i < 0) { #ifdef HAS_TRANSLATION ui_error(translate_text(IDGS_CANNOT_SEND_SNAPSHOT_TO_CLIENT)); #else ui_error(_("Cannot send snapshot to client")); #endif ui_display_statustext("", 0); lib_free(snapshotfilename); return; } network_mode = NETWORK_SERVER_CONNECTED; /* Send settings that need to be the same */ event_register_event_list(&settings_list); resources_get_event_safe_list(&settings_list); buf_size = (size_t)network_create_event_buffer(&buf, &(settings_list)); util_int_to_le_buf4(send_size4, (int)buf_size); network_send_buffer(network_socket, send_size4, 4); network_send_buffer(network_socket, buf, (int)buf_size); event_clear_list(&settings_list); lib_free(buf); current_send_frame = 0; last_received_frame = 0; network_test_delay(); } else { #ifdef HAS_TRANSLATION ui_error(translate_text(IDGS_CANNOT_CREATE_SNAPSHOT_FILE_S), snapshotfilename); #else ui_error(_("Cannot create snapshot file %s"), snapshotfilename); #endif } lib_free(snapshotfilename); }