public override void OnGetDataNow(ContentPackage package)
        {
            // Main thread only:
            Callback.MainThread(delegate(){
                // Getting a files text content from resources.
                byte[] data = null;

                string path = GetPath(package.location);

                TextAsset asset = Resources.Load(path) as TextAsset;

                if (asset == null)
                {
                    // Not found
                    package.Failed(404);
                }
                else
                {
                    // Ok
                    data = asset.bytes;
                    package.ReceivedHeaders(data.Length);
                    package.ReceivedData(data, 0, data.Length);
                }
            });
        }
        // Raw binary data
        public override void OnGetDataNow(ContentPackage package)
        {
            // Content type header is segments[0]:
            string contentType = package.location.Segments[0];

            // Trim it:
            contentType = contentType.Trim();

            byte[] data;

            if (contentType.EndsWith(";base64"))
            {
                // Split it off:
                contentType = contentType.Substring(0, contentType.Length - 7);

                // The data is at location.Segments[1] as base64:
                data = System.Convert.FromBase64String(package.location.Segments[1]);
            }
            else
            {
                // The data is at location.Segments[1], simply url encoded:
                string unescaped = System.Uri.UnescapeDataString(package.location.Segments[1]);

                data = System.Text.Encoding.UTF8.GetBytes(unescaped);
            }

            // Apply headers:
            package.responseHeaders["content-type"] = contentType;
            package.ReceivedHeaders(data.Length);

            // Apply data:
            package.ReceivedData(data, 0, data.Length);
        }
        /// <summary>Get the raw file data.</summary>
        public override void OnGetDataNow(ContentPackage package)
        {
            // Path without the protocol:
            string rawPath = package.location.Path;

            // If it contains a : and starts with / then chop it off:
            if (rawPath != null && rawPath.IndexOf(':') != -1 && rawPath[0] == '/')
            {
                rawPath = rawPath.Substring(1);
            }

            if (File.Exists(rawPath))
            {
                // Partial?
                int partialStart;
                int partialEnd;

                byte[] data;

                if (package.GetRange(out partialStart, out partialEnd))
                {
                    // Partial request.
                    FileStream fs = new FileStream(rawPath, FileMode.Open, FileAccess.Read);

                    // Seek there:
                    fs.Seek(partialStart, SeekOrigin.Begin);

                    // Setup Content-Range:
                    package.SetPartialResponse(partialStart, partialEnd, (int)fs.Length);

                    int contentLength = (partialEnd + 1) - partialStart;

                    // Read that many bytes into our buffer:
                    data = new byte[contentLength];

                    // Read:
                    fs.Read(data, 0, data.Length);

                    // Got headers:
                    package.ReceivedHeaders(contentLength);

                    // Ok!
                    fs.Close();
                }
                else
                {
                    // Get the bytes:
                    data = File.ReadAllBytes(rawPath);

                    // Got headers:
                    package.ReceivedHeaders(data.Length);
                }

                // Got data:
                package.ReceivedData(data, 0, data.Length);
            }
            else
            {
                // Let the package know:
                package.Failed(404);
            }
        }