using Devkoes.Restup.WebServer.Http;
using Devkoes.Restup.WebServer.Rest;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.ApplicationModel.Background;
using Windows.Storage;
using Newtonsoft.Json;
using Windows.Foundation;
using Devkoes.Restup.WebServer.File;
using Microsoft.Practices.Unity;
using Interfaces;
namespace WebSocketService
{
public sealed class StartupTask : IBackgroundTask
{
private const string APP_DB_DIR_NAME = "DataCenterService";
private RestRouteHandler _restRouteHandler;
private HttpServer _httpServer;
private BackgroundTaskDeferral _deferral;
private SQLite.Net.SQLiteConnection _conn;
private string _path;
///
/// If you start any asynchronous methods here, prevent the task
/// from closing prematurely by using BackgroundTaskDeferral as
/// described in http://aka.ms/backgroundtaskdeferral
///
public async void Run(IBackgroundTaskInstance taskInstance)
{
// This deferral should have an instance reference, if it doesn't... the GC will
// come some day, see that this method is not active anymore and the local variable
// should be removed. Which results in the application being closed.
_deferral = taskInstance.GetDeferral();
var httpServer = new HttpServer(8800);
_httpServer = httpServer;
_restRouteHandler = new RestRouteHandler();
_restRouteHandler.RegisterController();
//register the route to handle the api
httpServer.RegisterRoute("api", _restRouteHandler);
//register the route to handle the base web pages..
httpServer.RegisterRoute(new StaticFileRouteHandler(@"Website"));
_path = Path.Combine(ApplicationData.Current.LocalFolder.Path, "db.sqlite");
try
{
_conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), _path);
_conn.CreateTable();
_conn.CreateTable();
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
await httpServer.StartServerAsync();
// Dont release deferral, otherwise app will stop
}
}
}