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 ... /// ///