dmitgu (dmitgu) wrote,
dmitgu
dmitgu

Настольный веб-сервер - исходный код 1 часть из 2

Исходный код к заметке Настольный веб-сервер - делаем со скриптами и картинками
Настольный веб-сервер - исходный код 1 часть из 2 - Вы читаете её
Настольный веб-сервер - исходный код 2 часть из 2

Bundle.cs (новый файл в папке Modules проекта Home)

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Text;

using Nancy;

using Nancy.Responses;

// Данная прога (кроме работы с картинками) найдена тут:

// http://mike-ward.net/blog/post/00906/script-bundling-in-nancyfx

namespace SendExplorer.utilities

{

  public static class Bundle

  {

      public static Response Styles(this IResponseFormatter formatter, IEnumerable<string> paths,

          IRootPathProvider rootPathProvider)

      {

          return formatter.FromText(ConcatTextFiles(paths, rootPathProvider), "text/css");

      }

      public static Response Scripts(this IResponseFormatter formatter, IEnumerable<string> paths,

          IRootPathProvider rootPathProvider)

      {

          return formatter.FromText(ConcatTextFiles(paths, rootPathProvider),

              "application/x-javascript");

      }

      // Это добавка для картинок. Нашел тут:

      // http://stackoverflow.com/questions/14473510/how-to-make-an-image-handler-in-nancyfx

      public static Response Image(this IResponseFormatter formatter, string path,

          IRootPathProvider rootPathProvider, string contentType = null)

      {

          byte[] body = ReadByteFile(rootPathProvider, path);

          return new ByteArrayResponse(body, contentType);

      }

      public static Response FromText(this IResponseFormatter formatter, string text,

      string contentType)

      {

          var stream = new MemoryStream(Encoding.UTF8.GetBytes(text));

          return new StreamResponse(() => stream, contentType);

      }

      public static string ConcatTextFiles(IEnumerable<string> paths,

          IRootPathProvider rootPathProvider)

      {

          return string.Join(Environment.NewLine,

      paths.Select(p => ReadTextFile(rootPathProvider, p)));

      }

      private static string ReadTextFile(IRootPathProvider rootPathProvider, string path)

      {

          return File.ReadAllText(Path.Combine(rootPathProvider.GetRootPath(), path));

      }

      // Это добавка для картинок. Варианты смотрел тут:

      // http://www.cyberforum.ru/csharp-net/thread409591.html

      private static byte[] ReadByteFile(IRootPathProvider rootPathProvider, string path)

      {

          return File.ReadAllBytes(Path.Combine(rootPathProvider.GetRootPath(), path));

      }

  }  // закончен class Bundle

  // Следующий класс необходим для работы с картинками и найден тут:

  // http://stackoverflow.com/questions/14473510/how-to-make-an-image-handler-in-nancyfx

  public class ByteArrayResponse : Response

  {

      /// <summary>

      /// Byte array response

      /// </summary>

      /// <param name="body">Byte array to be the body of the response</param>

      /// <param name="contentType">Content type to use</param>

      public ByteArrayResponse(byte[] body, string contentType = null)

      {

          this.ContentType = contentType ?? "application/octet-stream";

          this.Contents = stream =>

          {

              using (var writer = new BinaryWriter(stream))

              {

                  writer.Write(body);

              }

          };

      } // закончен конструктор ByteArrayResponse(byte[], string)

  }  // закончен class ByteArrayResponse

}

Оставшийся код - в следующей заметке

Tags: ЖЖвЖЖ программирование, ИТ (информ. технологии), Мои алгоритмы
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments