File: CastleDownload.html

package info (click to toggle)
castle-game-engine 5.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 185,428 kB
  • sloc: pascal: 260,781; cpp: 1,363; objc: 713; makefile: 537; xml: 496; sh: 480; php: 4
file content (173 lines) | stat: -rw-r--r-- 11,514 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: CastleDownload</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<h1 class="unit">Unit CastleDownload</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Uses">Uses</a></td><td><a class="section" href="#PasDoc-Classes">Classes, Interfaces, Objects and Records</a></td><td><a class="section" href="#PasDoc-FuncsProcs">Functions and Procedures</a></td><td><a class="section" href="#PasDoc-Types">Types</a></td><td><a class="section" href="#PasDoc-Constants">Constants</a></td><td><a class="section" href="#PasDoc-Variables">Variables</a></td></tr></table>
<a name="PasDoc-Description"></a><h2 class="description">Description</h2>
<p>
Download URLs.</p>
<a name="PasDoc-Uses"></a><h2 class="uses">Uses</h2>
<ul class="useslist"><li>SysUtils</li><li>Classes</li><li>FpHttpClient</li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Classes"></a><h3 class="cio">Classes, Interfaces, Objects and Records</h3>
<table class="classestable wide_list">
<tr class="listheader">
<th class="itemname">Name</th>
<th class="itemdesc">Description</th>
</tr>
<tr class="list">
<td class="itemname">Class&nbsp;<a class="bold" href="CastleDownload.EDownloadError.html"><code>EDownloadError</code></a></td>
<td class="itemdesc">&nbsp;</td>
</tr>
</table>
<a name="PasDoc-FuncsProcs"></a><h3 class="summary">Functions and Procedures</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code>function <b><a  href="CastleDownload.html#Download">Download</a></b>(const URL: string; const Options: <a  href="CastleDownload.html#TStreamOptions">TStreamOptions</a> = []): TStream;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a  href="CastleDownload.html#Download">Download</a></b>(const URL: string; const Options: <a  href="CastleDownload.html#TStreamOptions">TStreamOptions</a>; out MimeType: string): TStream;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a  href="CastleDownload.html#URLSaveStream">URLSaveStream</a></b>(const URL: string; const Options: <a  href="CastleDownload.html#TStreamOptions">TStreamOptions</a> = []): TStream;</code></td>
</tr>
</table>
<a name="PasDoc-Types"></a><h3 class="summary">Types</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a  href="CastleDownload.html#TStreamOption">TStreamOption</a></b> = (...);</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code><b><a  href="CastleDownload.html#TStreamOptions">TStreamOptions</a></b> = set of <a  href="CastleDownload.html#TStreamOption">TStreamOption</a>;</code></td>
</tr>
</table>
<a name="PasDoc-Constants"></a><h3 class="summary">Constants</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a  href="CastleDownload.html#DefaultEnableNetwork">DefaultEnableNetwork</a></b> = false;</code></td>
</tr>
</table>
<a name="PasDoc-Variables"></a><h3 class="summary">Variables</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a  href="CastleDownload.html#EnableNetwork">EnableNetwork</a></b>: boolean = <a  href="CastleDownload.html#DefaultEnableNetwork">DefaultEnableNetwork</a>;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Functions and Procedures</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Download"></a><code>function <b>Download</b>(const URL: string; const Options: <a  href="CastleDownload.html#TStreamOptions">TStreamOptions</a> = []): TStream;</code></td>
</tr>
<tr><td colspan="1">
<p>
Return a stream to read given URL. Returned stream is suitable only for reading, and the initial position is always at the beginning. Overloaded version also returns a MIME type (or '' if unknown).

<p>All errors are reported by raising exceptions.

<p>A local file URL is always supported, without using any networking library. URL without any protocol is always treated like a local filename (absolute or relative to current dir), so this function can be a drop-in replacement for normal file reading. The MIME type for local files is guessed based on their extension.

<p>A data URI scheme (<a  href="http://en.wikipedia.org/wiki/Data_URI_scheme">http://en.wikipedia.org/wiki/Data_URI_scheme</a>) is also always supported. The MIME type for such content is specified explicitly in URI. TODO: right now, soGzip is ignored for data URIs, we never filter them through gunzip.

<p>It also automatically supports protocols to embed script contents: ecmascript, javascript (see VRML and X3D specifications), <a class="normal" href="CastleScript.html">castlescript</a>, kambiscript (see <a  href="http://castle-engine.sourceforge.net/castle_script.php">http://castle-engine.sourceforge.net/castle_script.php</a>), compiled (<a  href="http://castle-engine.sourceforge.net/x3d_extensions.php#section_ext_script_compiled">http://castle-engine.sourceforge.net/x3d_extensions.php#section_ext_script_compiled</a>). The MIME type for these is implied by the protocol (like &quot;application/javascript&quot; for ecmascript/javascript), and the returned stream simply contains script code.

<p>Set <a class="normal" href="CastleDownload.html#EnableNetwork">EnableNetwork</a> to <code>True</code> to have also support for network protocols. Right now this means only http, handled by FpHttpClient. The MIME type for such content is usually reported by the http server (but if the server doesn't report MIME type, we still try to guess it, looking at URL using <a class="normal" href="CastleURIUtils.html#URIMimeType">URIMimeType</a>).

<p>On Android, URLs that indicate assets (files packaged inside .apk) are also supported, as <code>assets:/my_file.png</code>.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Download"></a><code>function <b>Download</b>(const URL: string; const Options: <a  href="CastleDownload.html#TStreamOptions">TStreamOptions</a>; out MimeType: string): TStream;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="URLSaveStream"></a><code>function <b>URLSaveStream</b>(const URL: string; const Options: <a  href="CastleDownload.html#TStreamOptions">TStreamOptions</a> = []): TStream;</code></td>
</tr>
<tr><td colspan="1">
<p>
Create a stream to save a given URL, for example create a TFileStream to save a file for a <code>file</code> URL. In other words, perform <i>upload</i>. Right now, this only works for <code>file</code> URLs, and the only advantage it has over manually creating TFileStream is that this accepts URLs.</p>
</td></tr>
</table>
<h3 class="detail">Types</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TStreamOption"></a><code><b>TStreamOption</b> = (...);</code></td>
</tr>
<tr><td colspan="1">
<p>
Options for the <a class="normal" href="CastleDownload.html#Download">Download</a> and <a class="normal" href="CastleDownload.html#URLSaveStream">URLSaveStream</a> functions.</p>
<h6 class="description_section">Values</h6>
<ul>
<li>
soForceMemoryStream: Force result to be a TMemoryStream, with contents fully loaded to the memory, and freely seekable (you can move back and forth within). Without this option, <a class="normal" href="CastleDownload.html#Download">Download</a> may return other streams, for example TFileStream (that may not have good buffering, depending on OS) or TBase64DecodingStream (that may not allow seeking).

<p>Using TMemoryStream means that reading is fast and comfortable, but eats memory and doesn't allow to simultaneously read and process the contents (the file must be fully loaded, e.g. downloaded from the Internet, and ungzipped, before this function returns). So use this option only for files that aren't too big.

<p>For larger files, you usually don't want to use this option, instead wrap result in <a class="normal" href="CastleClassUtils.TBufferedReadStream.html">TBufferedReadStream</a>.</li>
<li>
soGzip: Filter the contents through gzip decompression (for <a class="normal" href="CastleDownload.html#Download">Download</a>) or compression (for <a class="normal" href="CastleDownload.html#URLSaveStream">URLSaveStream</a>).</li>
</ul>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TStreamOptions"></a><code><b>TStreamOptions</b> = set of <a  href="CastleDownload.html#TStreamOption">TStreamOption</a>;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<h3 class="detail">Constants</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="DefaultEnableNetwork"></a><code><b>DefaultEnableNetwork</b> = false;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<h3 class="detail">Variables</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="EnableNetwork"></a><code><b>EnableNetwork</b>: boolean = <a  href="CastleDownload.html#DefaultEnableNetwork">DefaultEnableNetwork</a>;</code></td>
</tr>
<tr><td colspan="1">
<p>
Can <a class="normal" href="CastleDownload.html#Download">Download</a> actually use the network. As all the downloading is blocking for now, this is initially <code>False</code>. If you want to really use the network, change it to <code>True</code>.</p>
</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(["trackPageView"]);
  _paq.push(["enableLinkTracking"]);

  (function() {
    var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
    _paq.push(["setTrackerUrl", u+"piwik.php"]);
    _paq.push(["setSiteId", "1"]);
    var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
    g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Piwik Code -->

<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a  href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:09</em>
</span>
</td></tr></table></body></html>