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