You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
5.8 KiB
219 lines
5.8 KiB
using Newtonsoft.Json;
|
|
|
|
namespace CoreAgent.Domain.Models.Protocol;
|
|
|
|
/// <summary>
|
|
/// 用户网络身份信息
|
|
/// 用于存储移动网络用户的基本身份和位置信息
|
|
/// 遵循DDD(领域驱动设计)原则,作为领域模型的一部分
|
|
/// </summary>
|
|
public class UserNetworkIdentity
|
|
{
|
|
/// <summary>
|
|
/// 公共陆地移动网络标识
|
|
/// </summary>
|
|
[JsonProperty("plmn")]
|
|
public string? Plmn { get; set; }
|
|
|
|
/// <summary>
|
|
/// 旧的临时移动用户标识
|
|
/// </summary>
|
|
[JsonProperty("oldTmsi")]
|
|
public string? OldTmsi { get; set; }
|
|
|
|
/// <summary>
|
|
/// 临时移动用户标识
|
|
/// </summary>
|
|
[JsonProperty("tmsi")]
|
|
public string? Tmsi { get; set; }
|
|
|
|
/// <summary>
|
|
/// 国际移动用户标识
|
|
/// </summary>
|
|
[JsonProperty("imsi")]
|
|
public string? Imsi { get; set; }
|
|
|
|
/// <summary>
|
|
/// 小区ID
|
|
/// </summary>
|
|
[JsonProperty("cellId")]
|
|
public int? CellId { get; set; }
|
|
|
|
/// <summary>
|
|
/// 用户设备ID
|
|
/// </summary>
|
|
[JsonProperty("ueId")]
|
|
public int? UeId { get; set; }
|
|
|
|
/// <summary>
|
|
/// 初始化用户网络身份信息的新实例
|
|
/// </summary>
|
|
public UserNetworkIdentity()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化用户网络身份信息的新实例
|
|
/// </summary>
|
|
/// <param name="plmn">公共陆地移动网络标识</param>
|
|
/// <param name="oldTmsi">旧的临时移动用户标识</param>
|
|
/// <param name="tmsi">临时移动用户标识</param>
|
|
/// <param name="imsi">国际移动用户标识</param>
|
|
/// <param name="cellId">小区ID</param>
|
|
/// <param name="ueId">用户设备ID</param>
|
|
public UserNetworkIdentity(
|
|
string? plmn = null,
|
|
string? oldTmsi = null,
|
|
string? tmsi = null,
|
|
string? imsi = null,
|
|
int? cellId = null,
|
|
int? ueId = null)
|
|
{
|
|
Plmn = plmn;
|
|
OldTmsi = oldTmsi;
|
|
Tmsi = tmsi;
|
|
Imsi = imsi;
|
|
CellId = cellId;
|
|
UeId = ueId;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查是否包含有效的用户身份信息
|
|
/// </summary>
|
|
/// <returns>是否包含有效信息</returns>
|
|
public bool HasValidIdentity()
|
|
{
|
|
return !string.IsNullOrWhiteSpace(Imsi) ||
|
|
!string.IsNullOrWhiteSpace(Tmsi) ||
|
|
UeId.HasValue;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查是否包含位置信息
|
|
/// </summary>
|
|
/// <returns>是否包含位置信息</returns>
|
|
public bool HasLocationInfo()
|
|
{
|
|
return !string.IsNullOrWhiteSpace(Plmn) || CellId.HasValue;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户身份摘要信息
|
|
/// </summary>
|
|
/// <returns>摘要信息</returns>
|
|
public string GetIdentitySummary()
|
|
{
|
|
var parts = new List<string>();
|
|
|
|
if (!string.IsNullOrWhiteSpace(Imsi))
|
|
parts.Add($"IMSI:{Imsi}");
|
|
|
|
if (!string.IsNullOrWhiteSpace(Tmsi))
|
|
parts.Add($"TMSI:{Tmsi}");
|
|
|
|
if (UeId.HasValue)
|
|
parts.Add($"UE:{UeId}");
|
|
|
|
if (!string.IsNullOrWhiteSpace(Plmn))
|
|
parts.Add($"PLMN:{Plmn}");
|
|
|
|
if (CellId.HasValue)
|
|
parts.Add($"Cell:{CellId}");
|
|
|
|
return parts.Count > 0 ? string.Join(" | ", parts) : "No Identity Info";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查TMSI是否发生变化
|
|
/// </summary>
|
|
/// <returns>TMSI是否发生变化</returns>
|
|
public bool HasTmsiChanged()
|
|
{
|
|
return !string.IsNullOrWhiteSpace(OldTmsi) &&
|
|
!string.IsNullOrWhiteSpace(Tmsi) &&
|
|
!OldTmsi.Equals(Tmsi, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取TMSI变化信息
|
|
/// </summary>
|
|
/// <returns>TMSI变化信息</returns>
|
|
public string GetTmsiChangeInfo()
|
|
{
|
|
if (HasTmsiChanged())
|
|
{
|
|
return $"TMSI Changed: {OldTmsi} -> {Tmsi}";
|
|
}
|
|
return "TMSI Unchanged";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建用户网络身份信息的副本
|
|
/// </summary>
|
|
/// <returns>新的用户网络身份信息</returns>
|
|
public UserNetworkIdentity Copy()
|
|
{
|
|
return new UserNetworkIdentity
|
|
{
|
|
Plmn = Plmn,
|
|
OldTmsi = OldTmsi,
|
|
Tmsi = Tmsi,
|
|
Imsi = Imsi,
|
|
CellId = CellId,
|
|
UeId = UeId
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新TMSI信息
|
|
/// </summary>
|
|
/// <param name="newTmsi">新的TMSI</param>
|
|
public void UpdateTmsi(string? newTmsi)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(Tmsi))
|
|
{
|
|
OldTmsi = Tmsi;
|
|
}
|
|
Tmsi = newTmsi;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 转换为JSON字符串
|
|
/// </summary>
|
|
/// <returns>JSON字符串</returns>
|
|
public string ToJson()
|
|
{
|
|
return JsonConvert.SerializeObject(this, Formatting.Indented);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 从JSON字符串创建用户网络身份信息
|
|
/// </summary>
|
|
/// <param name="json">JSON字符串</param>
|
|
/// <returns>用户网络身份信息</returns>
|
|
public static UserNetworkIdentity FromJson(string json)
|
|
{
|
|
return JsonConvert.DeserializeObject<UserNetworkIdentity>(json) ?? new UserNetworkIdentity();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 合并另一个用户网络身份信息
|
|
/// </summary>
|
|
/// <param name="other">另一个用户网络身份信息</param>
|
|
/// <returns>合并后的用户网络身份信息</returns>
|
|
public UserNetworkIdentity Merge(UserNetworkIdentity other)
|
|
{
|
|
if (other == null)
|
|
return this;
|
|
|
|
return new UserNetworkIdentity
|
|
{
|
|
Plmn = Plmn ?? other.Plmn,
|
|
OldTmsi = OldTmsi ?? other.OldTmsi,
|
|
Tmsi = Tmsi ?? other.Tmsi,
|
|
Imsi = Imsi ?? other.Imsi,
|
|
CellId = CellId ?? other.CellId,
|
|
UeId = UeId ?? other.UeId
|
|
};
|
|
}
|
|
}
|