Light12306/TrainInfomationProviderService/Program.cs

131 lines
4.1 KiB
C#
Raw Normal View History

2014-11-21 20:32:36 +08:00
using System;
using System.Collections.Generic;
2014-12-01 21:50:08 +08:00
using System.Configuration;
2014-11-21 20:32:36 +08:00
using System.Diagnostics;
2014-12-01 21:50:08 +08:00
using System.IO;
2014-11-21 20:32:36 +08:00
using System.Linq;
2014-12-01 21:50:08 +08:00
using System.Net;
2014-11-21 20:32:36 +08:00
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
2014-12-01 21:50:08 +08:00
using System.Web;
2014-11-21 20:32:36 +08:00
using System.Web.Hosting;
2014-12-01 21:50:08 +08:00
using System.Web.Mvc;
using System.Web.Routing;
2014-12-05 23:32:41 +08:00
using System.Windows.Forms;
2014-11-21 20:32:36 +08:00
using Newtonsoft.Json;
using TrainInfomationProviderService.StationInfo;
using TrainInfomationProviderService.StationInfo.Entities;
using TrainInfomationProviderService.TrainInfo;
using TrainInfomationProviderService.TrainInfo.Entities;
2014-12-05 23:32:41 +08:00
using Timer = System.Threading.Timer;
2014-11-21 20:32:36 +08:00
2014-12-01 21:50:08 +08:00
[assembly: System.Web.PreApplicationStartMethod(typeof(TrainInfomationProviderService.Program), "WebLoader")]
2014-11-21 20:32:36 +08:00
namespace TrainInfomationProviderService
{
2014-12-01 21:50:08 +08:00
public static class Program
2014-11-21 20:32:36 +08:00
{
2014-12-01 21:50:08 +08:00
static Timer _timer;
public static void WebLoader()
{
2014-12-02 21:13:25 +08:00
if (ConfigurationManager.AppSettings["local_disable_train_provider"] == "1")
return;
2014-12-14 23:17:15 +08:00
RouteTable.Routes.MapRoute("traintransit", "tt/{action}/{id}", new { area = "", controller = "Transit", id = UrlParameter.Optional }, new { action = "(keepalive|ls|ss|tor|dt|ls2|ssa)" }, new[] { "TrainInfomationProviderService.Web" });
Task.Run(() =>
{
try
{
Main(new string[0]);
}
catch (Exception ex)
{
File.WriteAllText(HostingEnvironment.MapPath("~/err.log"), ex.ToString());
}
2014-12-01 21:50:08 +08:00
2014-12-05 23:32:41 +08:00
var keepAliveUrl = ConfigurationManager.AppSettings["12306_keepaliveurl"];
if (!string.IsNullOrEmpty(keepAliveUrl))
2014-12-01 21:50:08 +08:00
{
2014-12-05 23:32:41 +08:00
_timer = new Timer(_ =>
2014-12-01 21:50:08 +08:00
{
2014-12-05 23:32:41 +08:00
try
{
new WebClient().DownloadString(keepAliveUrl);
}
catch (Exception)
{
}
Trace.TraceInformation("KEEP ALIVE已激活。");
}, null, new TimeSpan(0, 0, 20, 0), new TimeSpan(0, 0, 20, 0));
Trace.TraceInformation("KEEP ALIVE已启用");
}
else
{
Trace.TraceInformation("KEEP ALIVE未启用");
}
});
2014-12-01 21:50:08 +08:00
}
2014-11-21 20:32:36 +08:00
/// <summary>
/// 应用程序的主入口点。
/// </summary>
private static void Main(string[] args)
{
if (args.Length > 0 && args[0].IsIgnoreCaseEqualTo("--service"))
{
var servicesToRun = new ServiceBase[]
2014-12-01 21:50:08 +08:00
{
new InformationUpdaterService()
};
2014-11-21 20:32:36 +08:00
ServiceBase.Run(servicesToRun);
}
else
{
2014-12-01 21:50:08 +08:00
if (RunTimeContext.IsWeb)
{
var file = PathUtility.Combine(RunTimeContext.DataStorageRoot, "logs", "traininfo_" + DateTime.Now.ToString("yyyyMmdd_hhmmss") + ".log");
Directory.CreateDirectory(Path.GetDirectoryName(file));
2014-12-05 23:32:41 +08:00
var writer = new TextWriterTraceListener(file);
2014-12-01 21:50:08 +08:00
Trace.Listeners.Add(writer);
Trace.AutoFlush = true;
}
else
{
Trace.Listeners.Add(new ConsoleTraceListener());
}
2014-11-21 20:32:36 +08:00
StationManager.Instance.Init();
TrainInfoManager.Instance.Init();
2014-11-27 23:25:36 +08:00
SameStationManager.Init();
2014-12-01 21:50:08 +08:00
TrainInfoSearchProvider.Instance.Init();
2014-12-08 01:06:01 +08:00
if (!RunTimeContext.IsWeb)
{
//搜索?
var searchProvider = TrainInfoSearchProvider.Instance;
//var lines = searchProvider.FindDirectTrains(DateTime.Parse("2014-12-12"), "NVH", "JJG").ToArray();
//var maxTimeRage = lines.Max(s => s.CalculatedMinutesBase);
2014-12-01 21:50:08 +08:00
2014-12-08 01:06:01 +08:00
var opt = new TrainTransitSearchOptions();
opt.InitLimit(999999);
var altLines = searchProvider.FindOnceTransitTrains(DateTime.Parse("2015-01-29"), "NVH", "JJG", opt).ToArray();
2014-12-01 21:50:08 +08:00
2014-12-08 01:06:01 +08:00
//var availableLines = lines.Select(s => s.Train.Code + "," + s.FromStation.Name + "," + s.ToStation.Name + "," + s.ElapsedTime).ToArray();
Array.ForEach(altLines.Select(s =>
s.First.Train.Code + "," + s.First.FromStation.Name + "," + s.First.ToStation.Name + "," + s.First.From.Left.Value + " - " + s.First.To.Arrive.Value + " / " + s.First.ElapsedTime
+ " -> " + s.Second.Train.Code + "," + s.Second.FromStation.Name + "," + s.Second.ToStation.Name + "," + s.Second.From.Left.Value + " - " + s.Second.To.Arrive.Value + " / " + s.Second.ElapsedTime + " / 等待 " + s.WaitElaspsedTime + " / 总耗时 " + s.TotalElapsedTime
+ (s.NotRecommand ? " / 不推荐" : "")
).ToArray(), _ => Trace.TraceInformation(_));
2014-12-01 21:50:08 +08:00
2014-12-08 01:06:01 +08:00
//runtime mode
MessageBox.Show(StationManager.Instance.Storage.Version.ToString());
}
2014-11-21 20:32:36 +08:00
}
}
}
}