Nebula
Loading...
Searching...
No Matches
ioserver.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
19#include "core/refcounted.h"
20#include "core/singleton.h"
21#include "util/array.h"
22#include "util/string.h"
23#include "io/filetime.h"
24#include "io/schemeregistry.h"
27
28namespace Http
29{
31};
32
33//------------------------------------------------------------------------------
34namespace IO
35{
36class ArchiveFileSystem;
37class FileWatcher;
38class Stream;
39class URI;
40class AssignRegistry;
41
43{
46public:
48 IoServer();
50 virtual ~IoServer();
51
53 bool MountArchive(const URI& uri);
55 bool MountEmbeddedArchive(const URI& uri);
57 void UnmountArchive(const URI& uri);
59 bool IsArchiveMounted(const URI& uri) const;
61 void SetArchiveFileSystemEnabled(bool b);
63 bool IsArchiveFileSystemEnabled() const;
68
70 Ptr<Stream> CreateStream(const URI& uri) const;
72 bool CreateDirectory(const URI& uri) const;
74 bool EnsureDirectoriesForFile(const URI& uri) const;
76 bool DeleteDirectory(const URI& path) const;
78 bool DirectoryExists(const URI& path) const;
79
81 bool CopyFile(const URI& from, const URI& to) const;
83 bool DeleteFile(const URI& path) const;
85 bool FileExists(const URI& path) const;
87 bool IsLocked(const URI& path) const;
89 void SetReadOnly(const URI& path, bool b) const;
91 bool IsReadOnly(const URI& path) const;
93 unsigned int ComputeFileCrc(const URI& path) const;
95 void SetFileWriteTime(const URI& path, FileTime fileTime);
97 FileTime GetFileWriteTime(const URI& path) const;
99 static bool ReadFile(const URI& path, Util::String & contents);
101 static Util::String NativePath(const Util::String& path);
102
104 bool GetIOInfo(const URI& uri, IOStat& outInfo, bool prioritizeArchive) const;
105
107 Util::Array<Util::String> ListFiles(const URI& dir, const Util::String& pattern, bool asFullPath=false) const;
109 Util::Array<Util::String> ListDirectories(const URI& dir, const Util::String& pattern, bool asFullPath=false, bool prioritizeArchive=true) const;
110
111 using FileMapFunc = void(const Util::String& file, const Util::String& folder);
113 void IterateFolders(const URI& dir, const Util::String& pattern, FileMapFunc iter);
114
116 URI CreateTemporaryFilename(const URI& path) const;
117
118private:
121
124 static Threading::CriticalSection archiveCriticalSection;
126
132 static Threading::CriticalSection assignCriticalSection;
133 static Threading::CriticalSection schemeCriticalSection;
134 static Threading::CriticalSection watcherCriticalSection;
135};
136
137//------------------------------------------------------------------------------
140inline Ptr<IO::Stream>
142{
143 return IoServer::Instance()->CreateStream(uri);
144}
145
146//------------------------------------------------------------------------------
149inline bool
151{
152 return IoServer::Instance()->CreateDirectory(uri);
153}
154
155//------------------------------------------------------------------------------
158inline bool
160{
161 return IoServer::Instance()->FileExists(uri);
162}
163
164//------------------------------------------------------------------------------
168ListFiles(const IO::URI& dir, const Util::String& pattern = nullptr, bool asFullPath = false)
169{
170 return IoServer::Instance()->ListFiles(dir, pattern, asFullPath);
171}
172
173//------------------------------------------------------------------------------
177ListDirectories(const IO::URI& dir, const Util::String& pattern = nullptr, bool asFullPath = false)
178{
179 return IoServer::Instance()->ListDirectories(dir, pattern, asFullPath);
180}
181
182//------------------------------------------------------------------------------
185inline bool
187{
188 return IoServer::Instance()->DirectoryExists(uri);
189}
190
191//------------------------------------------------------------------------------
194inline bool
196{
197 return IoServer::Instance()->DeleteFile(uri);
198}
199
200//------------------------------------------------------------------------------
203inline bool
204CopyFile(const IO::URI& from, const IO::URI& to)
205{
206 return IoServer::Instance()->CopyFile(from, to);
207}
208
209//------------------------------------------------------------------------------
212inline bool
214{
215 return IoServer::Instance()->DeleteDirectory(uri);
216}
217
218//------------------------------------------------------------------------------
221inline void
226
227//------------------------------------------------------------------------------
233inline bool
235{
236 return this->archiveFileSystemEnabled && ArchiveFileSystem::Instance()->HasArchives();
237}
238
239} // namespace IO
240//------------------------------------------------------------------------------
The common base class of Nebula.
Definition refcounted.h:38
The HttpClientRegistry provides a way to re-use existing connections to HTTP servers instead of setti...
Definition httpclientregistry.h:26
Central registry for path assigns.
Definition assignregistry.h:26
Defines a file-access timestamp.
For registering callbacks for file modification events.
Definition filewatcher.h:74
static Threading::CriticalSection assignCriticalSection
Definition ioserver.h:132
Util::Array< Util::String > AddPathPrefixToArray(const Util::String &prefix, const Util::Array< Util::String > &filenames) const
helper function to add path prefix to file or dir names in array
Definition ioserver.cc:628
virtual ~IoServer()
destructor
Definition ioserver.cc:107
Ptr< AssignRegistry > assignRegistry
Definition ioserver.h:128
void SetFileWriteTime(const URI &path, FileTime fileTime)
set the write-time of a file
Definition ioserver.cc:512
bool IsArchiveMounted(const URI &uri) const
return true if a archive is mounted (without archive file extension!)
Definition ioserver.cc:199
static Threading::CriticalSection archiveCriticalSection
Definition ioserver.h:124
void SetReadOnly(const URI &path, bool b) const
set the readonly status of a file
Definition ioserver.cc:475
void(const Util::String &file, const Util::String &folder) FileMapFunc
Definition ioserver.h:111
bool IsArchiveFileSystemEnabled() const
return true if transparent archive filesystem is enabled
Definition ioserver.h:234
bool FileExists(const URI &path) const
return true if file exists
Definition ioserver.cc:428
static Threading::CriticalSection watcherCriticalSection
Definition ioserver.h:134
Ptr< Stream > CreateStream(const URI &uri) const
create a stream object for the given uri
Definition ioserver.cc:130
URI CreateTemporaryFilename(const URI &path) const
create a temporary file name
Definition ioserver.cc:690
Util::Array< Util::String > ListDirectories(const URI &dir, const Util::String &pattern, bool asFullPath=false, bool prioritizeArchive=true) const
list all subdirectories matching a pattern in a directory
Definition ioserver.cc:594
bool DeleteFile(const URI &path) const
delete a file
Definition ioserver.cc:404
bool MountEmbeddedArchive(const URI &uri)
mount an embedded file archive
Definition ioserver.cc:179
Ptr< FileWatcher > watcher
Definition ioserver.h:130
void SetArchiveFileSystemEnabled(bool b)
enable/disable transparent archive filesystem layering (default is yes)
Definition ioserver.h:222
void MountStandardArchives()
mount standard archives (e.g. home:export.zip and home:export_$(platform).zip)
Definition ioserver.cc:208
static bool ReadFile(const URI &path, Util::String &contents)
read contents of file and return as string
Definition ioserver.cc:650
static Threading::CriticalSection schemeCriticalSection
Definition ioserver.h:133
bool IsReadOnly(const URI &path) const
return read only status of a file
Definition ioserver.cc:487
bool IsLocked(const URI &path) const
return if file is locked
Definition ioserver.cc:677
bool GetIOInfo(const URI &uri, IOStat &outInfo, bool prioritizeArchive) const
get file/folder information (size, access time, modified time, creation time) via stat calls
Definition ioserver.cc:716
void UnmountArchive(const URI &uri)
unmount a file archive (without archive file extension!)
Definition ioserver.cc:190
void UnmountStandardArchives()
unmount standard archives
Definition ioserver.cc:234
Ptr< ArchiveFileSystem > archiveFileSystem
Definition ioserver.h:123
void IterateFolders(const URI &dir, const Util::String &pattern, FileMapFunc iter)
iterate through all files in hierarchy and call provided function
Definition ioserver.cc:739
bool DeleteDirectory(const URI &path) const
delete an empty directory
Definition ioserver.cc:416
bool EnsureDirectoriesForFile(const URI &uri) const
create all missing directories
Definition ioserver.cc:297
Ptr< SchemeRegistry > schemeRegistry
Definition ioserver.h:129
bool MountArchive(const URI &uri)
mount a file archive (without archive file extension!)
Definition ioserver.cc:169
Ptr< Http::HttpClientRegistry > httpClientRegistry
Definition ioserver.h:127
bool CopyFile(const URI &from, const URI &to) const
copy a file
Definition ioserver.cc:311
__DeclareClass(IoServer)
static Util::String NativePath(const Util::String &path)
return native path
Definition ioserver.cc:702
static bool StandardArchivesMounted
Definition ioserver.h:125
FileTime GetFileWriteTime(const URI &path) const
return the last write-time of a file
Definition ioserver.cc:524
bool CreateDirectory(const URI &uri) const
create all missing directories in the path
Definition ioserver.cc:256
Ptr< StreamCache > streamCache
Definition ioserver.h:131
bool DirectoryExists(const URI &path) const
return true if directory exists
Definition ioserver.cc:450
unsigned int ComputeFileCrc(const URI &path) const
get the CRC checksum of a file
Definition ioserver.cc:370
IoServer()
constructor
Definition ioserver.cc:39
__DeclareSingleton(IoServer)
Util::Array< Util::String > ListFiles(const URI &dir, const Util::String &pattern, bool asFullPath=false) const
list all files matching a pattern in a directory
Definition ioserver.cc:536
bool archiveFileSystemEnabled
Definition ioserver.h:122
Offers an abstract interface for read/write access to a sequence of bytes.
Definition stream.h:28
An URI object can split a Uniform Resource Identifier string into its components or build a string fr...
Definition uri.h:67
Nebula's smart pointer class which manages the life time of RefCounted objects.
Definition ptr.h:38
Nebula's dynamic array class.
Definition array.h:61
Nebula's universal string class.
Definition string.h:50
This file was generated with Nebula Trifid's idlc compiler tool.
Definition defaulthttprequesthandler.cc:15
Instances of wrapped stream classes.
Definition multiplayerfeatureunit.cc:324
Util::Array< Util::String > ListDirectories(const IO::URI &dir, const Util::String &pattern=nullptr, bool asFullPath=false)
Definition ioserver.h:177
bool DirectoryExists(const IO::URI &uri)
Definition ioserver.h:186
Ptr< IO::Stream > CreateStream(const IO::URI &uri)
Definition ioserver.h:141
bool DeleteDirectory(const IO::URI &uri)
Definition ioserver.h:213
bool DeleteFile(const IO::URI &uri)
Definition ioserver.h:195
bool FileExists(const IO::URI &uri)
Definition ioserver.h:159
bool CreateDirectory(const IO::URI &uri)
Definition ioserver.h:150
Util::Array< Util::String > ListFiles(const IO::URI &dir, const Util::String &pattern=nullptr, bool asFullPath=false)
Definition ioserver.h:168
bool CopyFile(const IO::URI &from, const IO::URI &to)
Definition ioserver.h:204
Definition filetime.h:41