Error FileAccessNetwork::_open(const String& p_path, int p_mode_flags) { ERR_FAIL_COND_V(p_mode_flags!=READ,ERR_UNAVAILABLE); if (opened) close(); FileAccessNetworkClient *nc = FileAccessNetworkClient::singleton; DEBUG_PRINT("open: "+p_path); DEBUG_TIME("open_begin"); nc->lock_mutex(); nc->put_32(id); nc->accesses[id]=this; nc->put_32(COMMAND_OPEN_FILE); CharString cs =p_path.utf8(); nc->put_32(cs.length()); nc->client->put_data((const uint8_t*)cs.ptr(),cs.length()); pos=0; eof_flag=false; last_page=-1; last_page_buff=NULL; // buffers.clear(); nc->unlock_mutex(); DEBUG_PRINT("OPEN POST"); DEBUG_TIME("open_post"); nc->sem->post(); //awaiting answer DEBUG_PRINT("WAIT..."); sem->wait(); DEBUG_TIME("open_end"); DEBUG_PRINT("WAIT ENDED..."); return response; }
FileAccessNetwork::~FileAccessNetwork() { close(); memdelete(sem); memdelete(page_sem); memdelete(buffer_mutex); FileAccessNetworkClient *nc = FileAccessNetworkClient::singleton; nc->lock_mutex(); id = nc->last_id++; nc->accesses.erase(id); nc->unlock_mutex(); }
void FileAccessNetwork::close() { if (!opened) return; FileAccessNetworkClient *nc = FileAccessNetworkClient::singleton; DEBUG_PRINT("CLOSE"); nc->lock_mutex(); nc->put_32(id); nc->put_32(COMMAND_CLOSE); pages.clear(); opened = false; nc->unlock_mutex(); }
uint64_t FileAccessNetwork::_get_modified_time(const String &p_file) { FileAccessNetworkClient *nc = FileAccessNetworkClient::singleton; nc->lock_mutex(); nc->put_32(id); nc->put_32(COMMAND_GET_MODTIME); CharString cs = p_file.utf8(); nc->put_32(cs.length()); nc->client->put_data((const uint8_t *)cs.ptr(), cs.length()); nc->unlock_mutex(); DEBUG_PRINT("MODTIME POST"); nc->sem->post(); sem->wait(); return exists_modtime; }
bool FileAccessNetwork::file_exists(const String &p_path) { FileAccessNetworkClient *nc = FileAccessNetworkClient::singleton; nc->lock_mutex(); nc->put_32(id); nc->put_32(COMMAND_FILE_EXISTS); CharString cs = p_path.utf8(); nc->put_32(cs.length()); nc->client->put_data((const uint8_t *)cs.ptr(), cs.length()); nc->unlock_mutex(); DEBUG_PRINT("FILE EXISTS POST"); nc->sem->post(); sem->wait(); return exists_modtime != 0; }
FileAccessNetwork::FileAccessNetwork() { eof_flag = false; opened = false; pos = 0; sem = Semaphore::create(); page_sem = Semaphore::create(); buffer_mutex = Mutex::create(); FileAccessNetworkClient *nc = FileAccessNetworkClient::singleton; nc->lock_mutex(); id = nc->last_id++; nc->accesses[id] = this; nc->unlock_mutex(); page_size = GLOBAL_GET("network/remote_fs/page_size"); read_ahead = GLOBAL_GET("network/remote_fs/page_read_ahead"); last_activity_val = 0; waiting_on_page = -1; last_page = -1; }