using SSQLib;
using System.Net;
using System.Linq;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Runtime.Remoting;
using System;
///
/// The container for the data.
///
namespace ArkData
{
public partial class DataContainer
{
///
/// A list of all players registered on the server.
///
public List Players { get; set; }
///
/// A list of all tribes registered on the server.
///
public List Tribes { get; set; }
///
/// Indicates whether the steam user data has been loaded.
///
private bool SteamLoaded { get; set; }
///
/// Constructs the DataContainer.
///
public DataContainer()
{
Players = new List();
Tribes = new List();
SteamLoaded = false;
}
///
/// Links the online players, to the player profiles.
///
/// The server ip address.
/// The Steam query port.
private void LinkOnlinePlayers(string ipString, int port)
{
try
{
var online = Enumerable.OfType(new SSQL().Players(new IPEndPoint(IPAddress.Parse(ipString), port))).ToList();
for (var i = 0; i < Players.Count; i++)
{
var online_player = online.SingleOrDefault(p => p.Name == Players[i].PlayerName);
if (online_player != null)
Players[i].Online = true;
else
Players[i].Online = false;
}
}
catch (SSQLServerException)
{
throw new ServerException("The connection to the server failed. Please check the configured IP address and port.");
}
}
///
/// Links the players to their tribes and the tribes to the players.
///
private void LinkPlayerTribe()
{
for (var i = 0; i < Players.Count; i++)
{
var player = Players[i];
player.OwnedTribes = Tribes.Where(t => t.OwnerId == player.CharacterId).ToList();
player.Tribe = Tribes.SingleOrDefault(t => t.Id == player.TribeId);
}
for (var i = 0; i < Tribes.Count; i++)
{
var tribe = Tribes[i];
tribe.Owner = Players.SingleOrDefault(p => p.CharacterId == tribe.OwnerId);
tribe.Players = Players.Where(p => p.TribeId == tribe.Id).ToList();
}
}
///
/// Deserializes JSON from Steam API and links Steam profile to player profile.
///
/// The JSON data string.
private void LinkSteamProfiles(string jsonString, DateTime lastSteamUpdateUtc)
{
var profiles = JsonConvert.DeserializeObject>(jsonString).response.players;
for (var i = 0; i < profiles.Count; i++)
{
var player = Players.Single(p => p.PlayerId == profiles[i].steamid);
player.PlayerName = profiles[i].personaname;
player.LastPlatformUpdateUtc = lastSteamUpdateUtc;
}
}
}
}