diff --git a/Base/XBaseHub.cs b/Base/XBaseHub.cs
index 1375fd7..a0dc57e 100644
--- a/Base/XBaseHub.cs
+++ b/Base/XBaseHub.cs
@@ -14,7 +14,8 @@ namespace xPushService.Base {
///
/// a base class for implementing Hubs ...
///
- public abstract class XBaseHub : Hub, IXBaseHub {
+ public abstract class XBaseHub : Hub, IXBaseHub
+ {
//
#region Props ...
protected readonly IXPushGroupStore groupStore;
@@ -23,10 +24,11 @@ namespace xPushService.Base {
//
#region Constructor ...
- public XBaseHub (
+ 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,48 +46,52 @@ namespace xPushService.Base {
//
#region Overrides ...
- public override Task OnConnectedAsync () {
+ public override Task OnConnectedAsync()
+ {
//
- var connection = GetConnection ();
- if (!connection.IsNull ()) {
+ var connection = GetConnection();
+ if (!connection.IsNull())
+ {
//
connectionStore
- .Add (connection)
- .RunTask ();
+ .Add(connection)
+ .RunTask();
//
var count = connectionStore
- .Count ()
- .RunTask ();
+ .Count()
+ .RunTask();
//
- Console.WriteLine ($"Count After Coonected: {count}");
+ Console.WriteLine($"Count After Coonected: {count}");
}
//
- return base.OnConnectedAsync ();
+ return base.OnConnectedAsync();
}
- public override Task OnDisconnectedAsync (Exception exception) {
+ public override Task OnDisconnectedAsync(Exception exception)
+ {
//
- var connection = GetConnection ();
- if (!connection.IsNull ()) {
+ var connection = GetConnection();
+ if (!connection.IsNull())
+ {
//
connectionStore
- .RemoveByConnectionId (connection.Id)
- .RunTask ();
+ .RemoveByConnectionId(connection.Id)
+ .RunTask();
//
var count = connectionStore
- .Count ()
- .RunTask ();
+ .Count()
+ .RunTask();
//
- Console.WriteLine ($"Count After DisCoonected: {count}");
+ Console.WriteLine($"Count After DisCoonected: {count}");
}
//
- return base.OnDisconnectedAsync (exception);
+ return base.OnDisconnectedAsync(exception);
}
#endregion
@@ -94,32 +101,34 @@ namespace xPushService.Base {
/// Notify to all Other Clients which a new Connection is established ...
///
///
- 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 actorRole = Context?.User?.FindFirst("role")?.Value;
//
- var pushMessage = new XPushMessage {
+ var pushMessage = new XPushMessage
+ {
//
Actor = actor,
Payload = connectionId,
TimeStamp = DateTime.UtcNow,
Type = XPushType.System.GetStringValue(),
- Topic = XPushType.System.GetStringValue(),
- Action = XBasePushAction.NotifyNewConnection.GetStringValue (),
+ Topic = XPushType.System.GetStringValue(),
+ Action = XBasePushAction.NotifyNewConnection.GetStringValue(),
Message = $"a new connection stablished by {connectionId} ...",
};
//
- Console.WriteLine ($"XPushServiceLog => ");
- Console.WriteLine ($"XPushServiceLog => NotifyNewConnection: User: {actor}/Role: {actorRole}/AuthType: {authType}/ConnectionId: {connectionId}/ConnectedAt: {DateTime.UtcNow}");
- Console.WriteLine ($"XPushServiceLog => ");
+ Console.WriteLine($"XPushServiceLog => ");
+ Console.WriteLine($"XPushServiceLog => NotifyNewConnection: User: {actor}/Role: {actorRole}/AuthType: {authType}/ConnectionId: {connectionId}/ConnectedAt: {DateTime.UtcNow}");
+ Console.WriteLine($"XPushServiceLog => ");
//
- return Clients.Others.SendAsync (
- XBasePushAction.PushMessage.GetStringValue (),
+ return Clients.Others.SendAsync(
+ XBasePushAction.PushMessage.GetStringValue(),
pushMessage
);
}
@@ -127,27 +136,30 @@ namespace xPushService.Base {
///
/// Update Last Seen ...
///
- public Task UpdateLastSeen () {
+ public Task UpdateLastSeen()
+ {
var connectionId = Context.ConnectionId;
return connectionStore
- .UpdateLastSeen (connectionId)
- .ContinueWith (updateLastSeenTask => {
+ .UpdateLastSeen(connectionId)
+ .ContinueWith(updateLastSeenTask =>
+ {
//
var updateLastSeen = updateLastSeenTask
- .RunTask ();
- if (updateLastSeen) {
+ .RunTask();
+ if (updateLastSeen)
+ {
//
var updatedConnection = connectionStore
- .GetByConnectionId (connectionId)
- .RunTask ();
+ .GetByConnectionId(connectionId)
+ .RunTask();
//
var count = connectionStore
- .Count ()
- .RunTask ();
+ .Count()
+ .RunTask();
//
- Console.WriteLine ($"Connection Last Seen Updated: {connectionId}: {updatedConnection.LastSeen}, Connection Count: {count} ...");
+ Console.WriteLine($"Connection Last Seen Updated: {connectionId}: {updatedConnection.LastSeen}, Connection Count: {count} ...");
}
});
}
@@ -157,16 +169,20 @@ namespace xPushService.Base {
///
///
///
- public Task PushMessageAsync (XPushMessage message) {
+ public Task PushMessageAsync(XPushMessage message)
+ {
//
- if (message.IsNull ()) {
- message = GetPushMessage ();
- } else {
+ if (message.IsNull())
+ {
+ message = GetPushMessage();
+ }
+ else
+ {
message.TimeStamp = DateTime.UtcNow;
}
//
- return Clients.Others.SendAsync (XBasePushAction.PushMessage.GetStringValue (), message);
+ return Clients.Others.SendAsync(XBasePushAction.PushMessage.GetStringValue(), message);
}
///
@@ -175,16 +191,20 @@ namespace xPushService.Base {
///
///
[Authorize]
- public Task AuthorizedMessageAsync (XPushMessage message) {
+ public Task AuthorizedMessageAsync(XPushMessage message)
+ {
//
- if (message.IsNull ()) {
- message = GetPushMessage ();
- } else {
+ if (message.IsNull())
+ {
+ message = GetPushMessage();
+ }
+ else
+ {
message.TimeStamp = DateTime.UtcNow;
}
//
- return Clients.Others.SendAsync (XBasePushAction.PushMessage.GetStringValue (), message);
+ return Clients.Others.SendAsync(XBasePushAction.PushMessage.GetStringValue(), message);
}
///
@@ -192,20 +212,24 @@ namespace xPushService.Base {
///
///
///
- public Task PushMessageToAll (XPushMessage message) {
+ public Task PushMessageToAll(XPushMessage message)
+ {
//
// Normalize Message ...
- if (message.IsNull ()) {
- message = GetPushMessage ();
- } else {
+ if (message.IsNull())
+ {
+ message = GetPushMessage();
+ }
+ else
+ {
message.TimeStamp = DateTime.UtcNow;
}
//
return Clients
.All
- .SendAsync (
- XBasePushAction.PushMessage.GetStringValue (),
+ .SendAsync(
+ XBasePushAction.PushMessage.GetStringValue(),
message
);
}
@@ -216,29 +240,34 @@ namespace xPushService.Base {
///
///
///
- public Task PushMessageToConnection (
+ public Task PushMessageToConnection(
string connectionId,
XPushMessage message
- ) {
+ )
+ {
//
// Validate Args ...
- if (connectionId.IsNullOrEmpty ()) {
+ if (connectionId.IsNullOrEmpty())
+ {
return Task.CompletedTask;
}
//
// Normalize Message ...
- if (message.IsNull ()) {
- message = GetPushMessage ();
- } else {
+ if (message.IsNull())
+ {
+ message = GetPushMessage();
+ }
+ else
+ {
message.TimeStamp = DateTime.UtcNow;
}
//
return Clients
- .Client (connectionId)
- .SendAsync (
- XBasePushAction.PushMessage.GetStringValue (),
+ .Client(connectionId)
+ .SendAsync(
+ XBasePushAction.PushMessage.GetStringValue(),
message
);
}
@@ -249,33 +278,38 @@ namespace xPushService.Base {
///
///
///
- public Task PushMessageToConnections (
+ public Task PushMessageToConnections(
IEnumerable connectionIds,
XPushMessage message
- ) {
+ )
+ {
//
// Validate Args ...
- if (!connectionIds.HasChild ()) {
+ if (!connectionIds.HasChild())
+ {
return Task.CompletedTask;
}
//
// Normalize Message ...
- if (message.IsNull ()) {
- message = GetPushMessage ();
- } else {
+ if (message.IsNull())
+ {
+ message = GetPushMessage();
+ }
+ else
+ {
message.TimeStamp = DateTime.UtcNow;
}
//
return Clients
- .Clients (
+ .Clients(
connectionIds
- .ToList ()
- .AsReadOnly ()
+ .ToList()
+ .AsReadOnly()
)
- .SendAsync (
- XBasePushAction.PushMessage.GetStringValue (),
+ .SendAsync(
+ XBasePushAction.PushMessage.GetStringValue(),
message
);
}
@@ -287,7 +321,8 @@ namespace xPushService.Base {
/// retrieve connected user name ...
///
///
- protected string GetUserName () {
+ protected string GetUserName()
+ {
return Context?.User?.Identity?.Name;
}
@@ -295,22 +330,25 @@ namespace xPushService.Base {
/// retrieve connected user role ...
///
///
- protected string GetUserRole () {
- return Context?.User?.FindFirst ("role")?.Value;
+ protected string GetUserRole()
+ {
+ return Context?.User?.FindFirst("role")?.Value;
}
///
/// Retrieve Empty Message ...
///
///
- 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 ...
///
///
- protected string GetConnectionId () {
+ protected string GetConnectionId()
+ {
return Context.ConnectionId;
}
@@ -332,19 +371,21 @@ namespace xPushService.Base {
/// Retrieve Connection Model from Context ...
///
///
- protected XPushConnectionDto GetConnection () {
+ protected XPushConnectionDto GetBaseConnection()
+ {
//
var connectionId = Context.ConnectionId;
var userName = Context.User.Identity.Name;
var authenticationType = Context.User.Identity.AuthenticationType;
//
- var httpContext = Context.GetHttpContext ();
- var deviceJson = httpContext.Request.Query["Option"].ToString ();
- var device = deviceJson.FromJSON ();
+ var httpContext = Context.GetHttpContext();
+ var deviceJson = httpContext.Request.Query["Option"].ToString();
+ var device = deviceJson.FromJSON();
//
- var result = new XPushConnectionDto {
+ var result = new XPushConnectionDto
+ {
User = userName,
Device = device,
Id = connectionId,
@@ -353,7 +394,7 @@ namespace xPushService.Base {
//
return result;
- }
+ }
#endregion
//
diff --git a/Models/XPushConnectionDto.cs b/Models/XPushConnectionDto.cs
index e0411fb..66d2eea 100644
--- a/Models/XPushConnectionDto.cs
+++ b/Models/XPushConnectionDto.cs
@@ -18,6 +18,10 @@ namespace xPushService.Models {
///
public string User { get; set; }
///
+ /// Connected Hub Type Name ...
+ ///
+ public string Type { get; set; }
+ ///
/// Connected User Device ...
///
///