Implemented DvbNipPrivateDataSpecifier for PostgreSQL.

This commit is contained in:
feyris-tan 2025-06-27 22:46:37 +02:00
parent d6a5f04b25
commit 693f3adc79
2 changed files with 58 additions and 1 deletions

View File

@ -71,8 +71,64 @@ namespace skyscraper5.Data.PostgreSql
command.Dispose();
}
private Dictionary<Tuple<ushort, ushort, ushort, ushort, uint>, DateTime> _dvbNipPrivateDataSpecifiers;
public bool DvbNipPrivateDataSpecifier(NipActualCarrierInformation currentCarrierInformation, DateTime versionUpdate,
uint privateDataSpecifier, List<string> privateDataSessions)
{
if (_dvbNipPrivateDataSpecifiers == null)
_dvbNipPrivateDataSpecifiers = new Dictionary<Tuple<ushort, ushort, ushort, ushort, uint>, DateTime>();
Tuple<ushort, ushort, ushort, ushort, uint> coordinates = new Tuple<ushort, ushort, ushort, ushort, uint>(
currentCarrierInformation.NipNetworkId, currentCarrierInformation.NipCarrierId,
currentCarrierInformation.NipLinkId, currentCarrierInformation.NipServiceId, privateDataSpecifier);
if (_dvbNipPrivateDataSpecifiers.ContainsKey(coordinates))
{
//PDS bereits bekannt.
DateTime lastChecked = _dvbNipPrivateDataSpecifiers[coordinates];
if (versionUpdate > lastChecked)
{
//Ist neuer, also updaten.
EnqueueTask(x => UpdateDvbNipPrivateDataSpecifier(x,coordinates,versionUpdate,privateDataSessions));
_dvbNipPrivateDataSpecifiers[coordinates] = versionUpdate;
return true;
}
else
{
//Ist älter oder hat sich nicht geändert.
return false;
}
}
else
{
//PDS noch nicht bekannt
EnqueueTask(x => InsertDvbNipPrivateDataSpecifier(x,coordinates,versionUpdate,privateDataSessions));
_dvbNipPrivateDataSpecifiers[coordinates] = versionUpdate;
return true;
}
}
private void InsertDvbNipPrivateDataSpecifier(NpgsqlConnection connection, Tuple<ushort, ushort, ushort, ushort, uint> coordinates, DateTime versionUpdate, List<string> privateDataSessions)
{
DateTime localUpdate = new DateTime(versionUpdate.Year, versionUpdate.Month, versionUpdate.Day,
versionUpdate.Hour, versionUpdate.Minute, versionUpdate.Second, DateTimeKind.Local);
NpgsqlCommand command = connection.CreateCommand();
command.CommandText = "INSERT INTO dvbnip_private_data_specifiers VALUES (@nid,@cid,@lid,@sid,@pds,DEFAULT,@vu,@s)";
command.Parameters.AddWithValue("@nid", NpgsqlDbType.Integer, (int)coordinates.Item1);
command.Parameters.AddWithValue("@cid", NpgsqlDbType.Integer, (int)coordinates.Item2);
command.Parameters.AddWithValue("@lid", NpgsqlDbType.Integer, (int)coordinates.Item3);
command.Parameters.AddWithValue("@sid", NpgsqlDbType.Integer, (int)coordinates.Item4);
command.Parameters.AddWithValue("@pds", NpgsqlDbType.Bigint, (long)coordinates.Item5);
command.Parameters.AddWithValue("@vu", NpgsqlDbType.Timestamp, localUpdate);
command.Parameters.AddWithValue("@s", NpgsqlDbType.Json, JsonConvert.SerializeObject(privateDataSessions));
int executeNonQuery = command.ExecuteNonQuery();
if (executeNonQuery != 1)
{
throw new DataException(String.Format("Expected to insert {0} rows, but it were {1}", 1, executeNonQuery));
}
}
private void UpdateDvbNipPrivateDataSpecifier(NpgsqlConnection connection, Tuple<ushort, ushort, ushort, ushort, uint> coordinates, DateTime versionUpdate, List<string> privateDataSessions)
{
throw new NotImplementedException();
}

View File

@ -231,9 +231,10 @@ namespace skyscraper5.Data.PostgreSql
private void UpdateDvbiServiceListEntryPointUpdateDateEx(NpgsqlConnection x, long hash, DateTime currentTime)
{
DateTime currentTimeLocal = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, currentTime.Hour, currentTime.Minute, currentTime.Second, DateTimeKind.Local);
NpgsqlCommand command = x.CreateCommand();
command.CommandText = "UPDATE dvbi_service_list_entry_points SET dateupdated = @dupdated WHERE sourcehash = @shash";
command.Parameters.AddWithValue("@dupdated", NpgsqlDbType.Timestamp, currentTime);
command.Parameters.AddWithValue("@dupdated", NpgsqlDbType.Timestamp, currentTimeLocal);
command.Parameters.AddWithValue("@shash",NpgsqlDbType.Bigint, hash);
command.ExecuteNonQuery();
}