ln.skyscanner/SkyScanner.cs

130 lines
2.8 KiB
C#
Raw Normal View History

2019-03-13 14:18:05 +01:00
using System;
using ln.logging;
using ln.http;
using System.Net;
using ln.skyscanner.http;
using System.IO;
2019-03-14 08:36:02 +01:00
using ln.skyscanner.crawl;
2019-03-14 13:31:15 +01:00
using ln.types.threads;
2019-03-15 07:43:12 +01:00
using System.Threading;
2019-03-13 14:18:05 +01:00
namespace ln.skyscanner
{
2019-03-15 15:35:44 +01:00
public enum ComponentState { STOPPED, INITIALIZED, STARTED, FAILED, STOPPING }
2019-03-13 14:18:05 +01:00
public class SkyScanner
{
public String[] Arguments { get; }
public String BasePath { get; private set; }
2019-03-14 13:31:15 +01:00
public Pool ConveniencePool { get; }
2019-03-13 14:18:05 +01:00
public HTTPServer HTTPServer { get; private set; }
2019-03-14 08:36:02 +01:00
public Crawler Crawler { get; private set; }
2019-03-13 14:18:05 +01:00
public SkyScanner(String[] args)
{
Logging.Log(LogLevel.INFO, "SkyScanner: Constructor");
BasePath = Path.GetFullPath(".");
Logging.Log(LogLevel.INFO, "SkyScanner: BasePath={0}", BasePath);
2019-03-14 13:31:15 +01:00
ConveniencePool = new Pool();
2019-03-13 14:18:05 +01:00
Arguments = args;
}
public void Start()
{
Logging.Log(LogLevel.INFO, "SkyScanner: Start()");
StartHttpServer();
}
public void Stop()
{
Logging.Log(LogLevel.INFO, "SkyScanner: Stop()");
2019-03-15 07:43:12 +01:00
StopCrawler();
2019-03-13 14:18:05 +01:00
StopHttpServer();
2019-03-15 07:43:12 +01:00
2019-03-15 15:35:44 +01:00
new Thread(() => ConveniencePool.Close()).Start();
2019-03-13 14:18:05 +01:00
}
/** HTTP Server **/
public ComponentState HttpStatus
{
get
{
if (HTTPServer != null)
{
if (HTTPServer.IsRunning)
return ComponentState.STARTED;
return ComponentState.INITIALIZED;
}
return ComponentState.STOPPED;
}
}
public void StartHttpServer()
{
HTTPServer = new HTTPServer();
HTTPServer.AddEndpoint(new System.Net.IPEndPoint(IPAddress.Any,8080));
HTTPServer.DefaultApplication = new SkyScannerHttpApplication(this);
HTTPServer.Start();
}
public void StopHttpServer()
{
if (HTTPServer != null)
{
if (HTTPServer.IsRunning)
{
HTTPServer.Stop();
}
}
}
2019-03-14 08:36:02 +01:00
/** Crawler **/
public ComponentState CrawlerStatus
{
get
{
if (Crawler != null)
{
2019-03-15 15:35:44 +01:00
return Crawler.CrawlerState;
2019-03-14 08:36:02 +01:00
}
return ComponentState.STOPPED;
}
}
2019-03-13 14:18:05 +01:00
2019-03-14 13:31:15 +01:00
public void StartCrawler()
{
if (Crawler == null)
{
Crawler = new Crawler(this);
}
}
public void StopCrawler()
{
if (Crawler != null)
{
Crawler.Stop();
Crawler = null;
}
}
2019-03-13 14:18:05 +01:00
}
}