From d3282e9d90b90f4ed2cea605df53a1f4d54cf20a Mon Sep 17 00:00:00 2001 From: alcexhim Date: Wed, 12 Nov 2014 11:39:19 -0500 Subject: [PATCH] Added HTTP accessor to Web plugin (untested) --- .../Accessors/HTTPAccessor.cs | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Web/Accessors/HTTPAccessor.cs diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Web/Accessors/HTTPAccessor.cs b/CSharp/Plugins/UniversalEditor.Plugins.Web/Accessors/HTTPAccessor.cs new file mode 100644 index 00000000..948a8c2f --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Web/Accessors/HTTPAccessor.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; + +namespace UniversalEditor.Accessors +{ + public class HTTPAccessor : Accessor + { + private static AccessorReference _ar = null; + public override AccessorReference MakeReference() + { + if (_ar == null) + { + _ar = base.MakeReference(); + _ar.Title = "Internet via HyperText Transfer Protocol (HTTP)"; + _ar.ImportOptions.Add(new CustomOptionText("FileName", "&File name: ")); + } + return _ar; + } + + private string mvarFileName = String.Empty; + public string FileName { get { return mvarFileName; } set { mvarFileName = value; } } + + private System.Net.HttpWebRequest http = null; + private System.IO.Stream mvarStream = null; + + public override long Length + { + get + { + return mvarStream.Length; + } + set + { + mvarStream.SetLength(value); + } + } + + protected override long GetPosition() + { + return mvarStream.Position; + } + + public override void Seek(long length, IO.SeekOrigin position) + { + System.IO.SeekOrigin position1 = System.IO.SeekOrigin.Begin; + switch (position) + { + case IO.SeekOrigin.Begin: position1 = System.IO.SeekOrigin.Begin; break; + case IO.SeekOrigin.Current: position1 = System.IO.SeekOrigin.Current; break; + case IO.SeekOrigin.End: position1 = System.IO.SeekOrigin.End; break; + } + mvarStream.Seek(length, position1); + } + + protected override void OpenInternal() + { + if (http != null) throw new InvalidOperationException("Please close before opening"); + http = (HttpWebRequest)WebRequest.Create(mvarFileName); + WebResponse resp = http.GetResponse(); + mvarStream = resp.GetResponseStream(); + } + + protected override void CloseInternal() + { + if (http == null) throw new InvalidOperationException("Please open before closing"); + http.Abort(); + if (mvarStream != null) mvarStream.Close(); + mvarStream = null; + http = null; + } + + protected override int WriteInternal(byte[] buffer, int start, int count) + { + if (mvarStream == null) throw new InvalidOperationException("Please open before writing"); + mvarStream.Write(buffer, start, count); + return count; + } + protected override int ReadInternal(byte[] buffer, int start, int count) + { + if (mvarStream == null) throw new InvalidOperationException("Please open before reading"); + return mvarStream.Read(buffer, start, count); + } + } +}