Пример #1
0
 public WebApplicationService()
 {
     m_mapService = new NancyHostMapService();
     Console.WriteLine();
     Console.Write("Loading service...");
     m_mapService.Load();
     Console.WriteLine("   Done.");
     Console.Write("Starting service...");
     m_mapService.Start();
     Console.WriteLine("   Done.");
 }
Пример #2
0
 public WebApplicationService()
 {
   m_mapService = new NancyHostMapService();
   Console.WriteLine();
   Console.Write("Loading service...");
   m_mapService.Load();
   Console.WriteLine("   Done.");
   Console.Write("Starting service...");
   m_mapService.Start();
   Console.WriteLine("   Done.");
 }
Пример #3
0
        public MapsModule(WebApplicationService webApplicationService)
        {
            m_manualResetEvents = new ConcurrentStack <ManualResetEventSlim>();
            NancyHostMapService mapService = webApplicationService.GetServiceInstance();

            if (m_mapUrls == null)
            {
                string[] mapUrls = mapService.GetMapUrls();

                for (int i = 0; i < mapUrls.Length; i++)
                {
                    Uri uri = new Uri(mapUrls[i]);
                    mapUrls[i] = uri.AbsolutePath;
                }

                m_mapUrls = mapUrls;
            }

            if (m_mapUrls.Length == 0)
            {
                return;
            }

            for (int i = 0; i < m_mapUrls.Length; i++)
            {
                Get[m_mapUrls[i], true] = async(x, ct) =>
                {
                    Response resp   = this.Context.Response;
                    Stream   stream = new MemoryStream();

                    if (resp == null)
                    {
                        resp = new StreamResponse(() => stream);
                        this.Context.Response = resp;
                    }

                    ManualResetEventSlim mres = null;
                    if (!m_manualResetEvents.TryPop(out mres))
                    {
                        mres = new ManualResetEventSlim();
                    }

                    IHttpContext httpContext = new NancyHttpContext(this.Context, mres);

                    Action <IAsyncResult> TileCompletedCallback = (result) =>
                    {
                        resp.Contents.Invoke(stream);
                        stream.Position = 0;
                    };

                    IAsyncResult ar = mapService.ProcessRequest(httpContext, new AsyncCallback(TileCompletedCallback), 0, 0);

                    if (!ar.IsCompleted)
                    {
                        mres.Wait();
                        mres.Reset();
                    }

                    m_manualResetEvents.Push(mres);

                    httpContext.Response.Flush();

                    return(this.Context.Response);
                };
            }
        }