using ConanData.DataAccess;
using ConanData.Database;
using System;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
namespace ConanData
{
///
/// The container for the Game Server data.
///
public partial class DataContainer
{
///
/// Instantiates the LDataContainer and parses all the user data files
///
public static DataContainer Create(string dataFile)
{
if (string.IsNullOrWhiteSpace(dataFile) || !File.Exists(dataFile))
return new DataContainer();
var connectionString = $"Data Source={dataFile};Version=3;Read Only=True;";
var connection = Connection.CreateConnection(connectionString, true);
var accountDataAccess = new AccountDataAccess(connection);
var accountData = accountDataAccess.FetchDataSetAll();
var charactersDataAccess = new CharactersDataAccess(connection);
var charactersData = charactersDataAccess.FetchDataSetAll();
var guildsDataAccess = new GuildsDataAccess(connection);
var guildsData = guildsDataAccess.FetchDataSetAll();
connection.DeregisterConnection();
var container = new DataContainer();
foreach (var character in charactersData.Characters)
{
var account = accountData.Account.FirstOrDefault(a => a.AccountId == character.AccountId);
container.Players.Add(Parser.ParsePlayer(account, character));
}
foreach (var guild in guildsData.Guilds)
{
container.Guilds.Add(Parser.ParseGuild(guild));
}
container.LinkPlayerGuild();
return container;
}
///
/// Instantiates the DataContainer and parses the characters table
///
/// The async task context containing the resulting container.
public static int GetOnlinePlayerCount(string dataFile)
{
if (string.IsNullOrWhiteSpace(dataFile) || !File.Exists(dataFile))
return 0;
var connectionString = $"Data Source={dataFile};Version=3;Read Only=True;";
var connection = Connection.CreateConnection(connectionString, true);
var accountDataAccess = new AccountDataAccess(connection);
var accountData = accountDataAccess.FetchDataSetOnlineOnly();
int result = accountData?.Account.Count ?? 0;
connection.DeregisterConnection();
return result;
}
}
}