add support for separating connection type in XPushConnectionDto by adding an abstract GetConnection method ...

This commit is contained in:
2025-07-14 08:03:09 +03:30
parent 6e1fb930a5
commit cfcb2d12b4
2 changed files with 134 additions and 89 deletions
+76 -35
View File
@@ -14,7 +14,8 @@ namespace xPushService.Base {
/// <summary>
/// a base class for implementing Hubs ...
/// </summary>
public abstract class XBaseHub : Hub, IXBaseHub {
public abstract class XBaseHub : Hub, IXBaseHub
{
//
#region Props ...
protected readonly IXPushGroupStore groupStore;
@@ -26,7 +27,8 @@ namespace xPushService.Base {
public XBaseHub(
IXPushGroupStore groupStore,
IXPushConnectionStore connectionStore
) : base () {
) : base()
{
//
this.groupStore = groupStore;
this.connectionStore = connectionStore;
@@ -35,6 +37,7 @@ namespace xPushService.Base {
//
#region Abstract ...
public abstract XPushConnectionDto GetConnection();
#endregion
//
@@ -43,10 +46,12 @@ namespace xPushService.Base {
//
#region Overrides ...
public override Task OnConnectedAsync () {
public override Task OnConnectedAsync()
{
//
var connection = GetConnection();
if (!connection.IsNull ()) {
if (!connection.IsNull())
{
//
connectionStore
.Add(connection)
@@ -65,10 +70,12 @@ namespace xPushService.Base {
return base.OnConnectedAsync();
}
public override Task OnDisconnectedAsync (Exception exception) {
public override Task OnDisconnectedAsync(Exception exception)
{
//
var connection = GetConnection();
if (!connection.IsNull ()) {
if (!connection.IsNull())
{
//
connectionStore
.RemoveByConnectionId(connection.Id)
@@ -94,14 +101,16 @@ namespace xPushService.Base {
/// Notify to all Other Clients which a new Connection is established ...
/// </summary>
/// <param name="connectionId"></param>
public Task NotifyNewConnection (string connectionId) {
public Task NotifyNewConnection(string connectionId)
{
//
var actor = Context.User.Identity.Name;
var authType = Context.User.Identity.AuthenticationType;
var actorRole = Context?.User?.FindFirst("role")?.Value;
//
var pushMessage = new XPushMessage {
var pushMessage = new XPushMessage
{
//
Actor = actor,
Payload = connectionId,
@@ -127,15 +136,18 @@ namespace xPushService.Base {
/// <summary>
/// Update Last Seen ...
/// </summary>
public Task UpdateLastSeen () {
public Task UpdateLastSeen()
{
var connectionId = Context.ConnectionId;
return connectionStore
.UpdateLastSeen(connectionId)
.ContinueWith (updateLastSeenTask => {
.ContinueWith(updateLastSeenTask =>
{
//
var updateLastSeen = updateLastSeenTask
.RunTask();
if (updateLastSeen) {
if (updateLastSeen)
{
//
var updatedConnection = connectionStore
.GetByConnectionId(connectionId)
@@ -157,11 +169,15 @@ namespace xPushService.Base {
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public Task PushMessageAsync (XPushMessage message) {
public Task PushMessageAsync(XPushMessage message)
{
//
if (message.IsNull ()) {
if (message.IsNull())
{
message = GetPushMessage();
} else {
}
else
{
message.TimeStamp = DateTime.UtcNow;
}
@@ -175,11 +191,15 @@ namespace xPushService.Base {
/// <param name="message"></param>
/// <returns></returns>
[Authorize]
public Task AuthorizedMessageAsync (XPushMessage message) {
public Task AuthorizedMessageAsync(XPushMessage message)
{
//
if (message.IsNull ()) {
if (message.IsNull())
{
message = GetPushMessage();
} else {
}
else
{
message.TimeStamp = DateTime.UtcNow;
}
@@ -192,12 +212,16 @@ namespace xPushService.Base {
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public Task PushMessageToAll (XPushMessage message) {
public Task PushMessageToAll(XPushMessage message)
{
//
// Normalize Message ...
if (message.IsNull ()) {
if (message.IsNull())
{
message = GetPushMessage();
} else {
}
else
{
message.TimeStamp = DateTime.UtcNow;
}
@@ -219,18 +243,23 @@ namespace xPushService.Base {
public Task PushMessageToConnection(
string connectionId,
XPushMessage message
) {
)
{
//
// Validate Args ...
if (connectionId.IsNullOrEmpty ()) {
if (connectionId.IsNullOrEmpty())
{
return Task.CompletedTask;
}
//
// Normalize Message ...
if (message.IsNull ()) {
if (message.IsNull())
{
message = GetPushMessage();
} else {
}
else
{
message.TimeStamp = DateTime.UtcNow;
}
@@ -252,18 +281,23 @@ namespace xPushService.Base {
public Task PushMessageToConnections(
IEnumerable<string> connectionIds,
XPushMessage message
) {
)
{
//
// Validate Args ...
if (!connectionIds.HasChild ()) {
if (!connectionIds.HasChild())
{
return Task.CompletedTask;
}
//
// Normalize Message ...
if (message.IsNull ()) {
if (message.IsNull())
{
message = GetPushMessage();
} else {
}
else
{
message.TimeStamp = DateTime.UtcNow;
}
@@ -287,7 +321,8 @@ namespace xPushService.Base {
/// retrieve connected user name ...
/// </summary>
/// <returns></returns>
protected string GetUserName () {
protected string GetUserName()
{
return Context?.User?.Identity?.Name;
}
@@ -295,7 +330,8 @@ namespace xPushService.Base {
/// retrieve connected user role ...
/// </summary>
/// <returns></returns>
protected string GetUserRole () {
protected string GetUserRole()
{
return Context?.User?.FindFirst("role")?.Value;
}
@@ -303,14 +339,16 @@ namespace xPushService.Base {
/// Retrieve Empty Message ...
/// </summary>
/// <returns></returns>
protected XPushMessage GetPushMessage () {
protected XPushMessage GetPushMessage()
{
//
var timeStamp = DateTime.UtcNow;
var actor = Context.User.Identity.Name;
var connectionId = Context.ConnectionId;
//
var result = new XPushMessage {
var result = new XPushMessage
{
Actor = actor,
TimeStamp = timeStamp,
Payload = connectionId,
@@ -324,7 +362,8 @@ namespace xPushService.Base {
/// retrieve current connection id ...
/// </summary>
/// <returns></returns>
protected string GetConnectionId () {
protected string GetConnectionId()
{
return Context.ConnectionId;
}
@@ -332,7 +371,8 @@ namespace xPushService.Base {
/// Retrieve Connection Model from Context ...
/// </summary>
/// <returns></returns>
protected XPushConnectionDto GetConnection () {
protected XPushConnectionDto GetBaseConnection()
{
//
var connectionId = Context.ConnectionId;
var userName = Context.User.Identity.Name;
@@ -344,7 +384,8 @@ namespace xPushService.Base {
var device = deviceJson.FromJSON<XDeviceDto>();
//
var result = new XPushConnectionDto {
var result = new XPushConnectionDto
{
User = userName,
Device = device,
Id = connectionId,
+4
View File
@@ -18,6 +18,10 @@ namespace xPushService.Models {
/// <value></value>
public string User { get; set; }
/// <summary>
/// Connected Hub Type Name ...
/// </summary>
public string Type { get; set; }
/// <summary>
/// Connected User Device ...
/// </summary>
/// <value></value>