public class PushMessage<TData>
where TData : PushMessageItem, new()
public int Version { get; }
public string Type { get; }
public TData Item { get; set; }
var baseData = new TData();
Version = baseData.PushMessageVersion;
Type = baseData.PushMessageType;
public abstract class PushMessageItem
protected internal abstract int PushMessageVersion { get; }
protected internal abstract string PushMessageType { get; }
public abstract class AssetChangedDto: PushMessageItem
protected internal sealed override string PushMessageType => "AssetChanged";
public sealed class AssetChangedDtoV1: AssetChangedDto
protected internal override int PushMessageVersion => 1;
public string Id { get; }
public string Name { get; }
public string Type { get; }
public AssetChangedDtoV1()
public AssetChangedDtoV1(string id, string name, string type)
public sealed class AssetPositionChangedDto: PushMessageItem
protected internal override int PushMessageVersion => 1;
protected internal override string PushMessageType => "AssetPosition";
public string Id { get; }
public double Longitude { get; }
public double Latitude { get; }
public int? Speed { get; }
public int? Heading { get; }
public DateTime RegisteredOn { get; }
public AssetPositionChangedDto()
public AssetPositionChangedDto(string id, double longitude, double latitude, int? speed, int? heading, DateTime registeredOn)
RegisteredOn = registeredOn;
public sealed class AssetActivityChangedDto: PushMessageItem
protected internal override int PushMessageVersion => 1;
protected internal override string PushMessageType => "AssetActivity";
public string Id { get; }
public string Activity { get; }
public DateTime StartedOn { get; }
public AssetActivityChangedDto()
public AssetActivityChangedDto(string id, string activity, DateTime startedOn)
public static void Main()
Console.WriteLine("Hello World");