You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.7 KiB
71 lines
2.7 KiB
#if !UNITY_WEBGL || UNITY_EDITOR |
|
|
|
using System; |
|
using BestHTTP.Core; |
|
using BestHTTP.Extensions; |
|
using BestHTTP.PlatformSupport.FileSystem; |
|
|
|
namespace BestHTTP.Connections |
|
{ |
|
internal sealed class FileConnection : ConnectionBase |
|
{ |
|
public FileConnection(string serverAddress) |
|
:base(serverAddress) |
|
{ } |
|
|
|
protected override void ThreadFunc() |
|
{ |
|
try |
|
{ |
|
// Step 1 : create a stream with header information |
|
// Step 2 : create a stream from the file |
|
// Step 3 : create a StreamList |
|
// Step 4 : create a HTTPResponse object |
|
// Step 5 : call the Receive function of the response object |
|
|
|
using (System.IO.Stream fs = HTTPManager.IOService.CreateFileStream(this.CurrentRequest.CurrentUri.LocalPath, FileStreamModes.OpenRead)) |
|
using (StreamList stream = new StreamList(new BufferPoolMemoryStream(), fs)) |
|
{ |
|
// This will write to the MemoryStream |
|
stream.Write("HTTP/1.1 200 Ok\r\n"); |
|
stream.Write("Content-Type: application/octet-stream\r\n"); |
|
stream.Write("Content-Length: " + fs.Length.ToString() + "\r\n"); |
|
stream.Write("\r\n"); |
|
|
|
stream.Seek(0, System.IO.SeekOrigin.Begin); |
|
|
|
base.CurrentRequest.Response = new HTTPResponse(base.CurrentRequest, stream, base.CurrentRequest.UseStreaming, false); |
|
|
|
if (!CurrentRequest.Response.Receive()) |
|
CurrentRequest.Response = null; |
|
} |
|
} |
|
catch(Exception e) |
|
{ |
|
CurrentRequest.Response = null; |
|
|
|
if (!CurrentRequest.IsCancellationRequested) |
|
{ |
|
CurrentRequest.Exception = e; |
|
CurrentRequest.State = HTTPRequestStates.Error; |
|
} |
|
} |
|
finally |
|
{ |
|
if (this.CurrentRequest.IsCancellationRequested) |
|
{ |
|
this.CurrentRequest.Response = null; |
|
this.CurrentRequest.State = this.CurrentRequest.IsTimedOut ? HTTPRequestStates.TimedOut : HTTPRequestStates.Aborted; |
|
} |
|
else if (this.CurrentRequest.Response == null) |
|
this.CurrentRequest.State = HTTPRequestStates.Error; |
|
else |
|
this.CurrentRequest.State = HTTPRequestStates.Finished; |
|
|
|
ConnectionEventHelper.EnqueueConnectionEvent(new ConnectionEventInfo(this, HTTPConnectionStates.Closed)); |
|
} |
|
} |
|
} |
|
} |
|
|
|
#endif |