public SapphireHttpSyncMiddleware( RequestDelegate next, HttpSyncConfiguration configuration, ILogger <SapphireHttpSyncMiddleware> logger, ISapphireSyncModule sapphireHttpSyncModule) { this.next = next; this.configuration = configuration; this.logger = logger; this.sapphireHttpSyncModule = (SapphireHttpSyncModule)sapphireHttpSyncModule; }
public SapphireHttpSyncMiddleware( RequestDelegate next, SapphireDatabaseOptions options, ILogger <SapphireHttpSyncMiddleware> logger, ISapphireSyncModule sapphireHttpSyncModule) { this.next = next; this.options = options; this.logger = logger; this.sapphireHttpSyncModule = (SapphireHttpSyncModule)sapphireHttpSyncModule; }
public SyncManager(IServiceProvider serviceProvider, ILogger <SyncManager> logger) { sapphireSyncModule = (ISapphireSyncModule)serviceProvider.GetService(typeof(ISapphireSyncModule)); if (sapphireSyncModule != null) { sapphireSyncModule.SyncRequestRequestReceived += request => { if (request.OriginId == uId) { return; } if (request.Propagate) { Publish(request); } if (request is SendChangesRequest sendChangesRequest) { Type dbType = Assembly.GetEntryAssembly()?.DefinedTypes .FirstOrDefault(t => t.FullName == sendChangesRequest.DbType); if (dbType != null) { SapphireChangeNotifier changeNotifier = (SapphireChangeNotifier)serviceProvider.GetService(typeof(SapphireChangeNotifier)); logger.LogInformation("Handling changes from other server"); changeNotifier.HandleChanges(sendChangesRequest.Changes, dbType); } } else if (request is SendMessageRequest sendMessageRequest) { SapphireMessageSender sender = (SapphireMessageSender)serviceProvider.GetService(typeof(SapphireMessageSender)); logger.LogInformation("Handling message from other server"); sender.Send(sendMessageRequest.Message, sendMessageRequest.Filter, sendMessageRequest.FilterParameters, false); } else if (request is SendPublishRequest sendPublishRequest) { SapphireMessageSender sender = (SapphireMessageSender)serviceProvider.GetService(typeof(SapphireMessageSender)); logger.LogInformation("Handling publish from other server"); sender.Publish(sendPublishRequest.Topic, sendPublishRequest.Message, sendPublishRequest.Retain, false); } }; } }
public SyncManager(IServiceProvider serviceProvider, ILogger <SyncManager> logger, DbContextTypeContainer contextTypeContainer, SyncContext syncContext) { this.logger = logger; this.contextTypeContainer = contextTypeContainer; this.syncContext = syncContext; sapphireSyncModule = (ISapphireSyncModule)serviceProvider.GetService(typeof(ISapphireSyncModule)); if (sapphireSyncModule != null) { sapphireSyncModule.SyncRequestRequestReceived += request => { if (request.OriginId == syncContext.SessionId) { return; } if (request.Propagate) { Publish(request); } if (request is SendChangesRequest sendChangesRequest) { Type dbType = contextTypeContainer.GetContext(sendChangesRequest.DbName); if (dbType != null) { SapphireChangeNotifier changeNotifier = (SapphireChangeNotifier)serviceProvider.GetService(typeof(SapphireChangeNotifier)); logger.LogInformation("Handling changes from other server"); logger.LogDebug( "Handling {changeCount} changes of '{dbType}' from server with OriginId '{originId}'. Propagate: {propagate}", sendChangesRequest.Changes.Count, dbType.Name, sendChangesRequest.OriginId, sendChangesRequest.Propagate); changeNotifier.HandleChanges(sendChangesRequest.Changes, dbType); } } else if (request is SendMessageRequest sendMessageRequest) { SapphireMessageSender sender = (SapphireMessageSender)serviceProvider.GetService(typeof(SapphireMessageSender)); logger.LogInformation("Handling message from other server"); logger.LogDebug( "Handling message for filter '{filter}' from server with OriginId '{originId}'. Propagate: {propagate}", sendMessageRequest.Filter, sendMessageRequest.OriginId, sendMessageRequest.Propagate); sender.Send(sendMessageRequest.Message, sendMessageRequest.Filter, sendMessageRequest.FilterParameters, false); } else if (request is SendPublishRequest sendPublishRequest) { SapphireMessageSender sender = (SapphireMessageSender)serviceProvider.GetService(typeof(SapphireMessageSender)); logger.LogInformation("Handling publish from other server"); logger.LogDebug( "Handling publish to topic '{topic}' from server with OriginId '{originId}'. Retain: {retain}, Propagate: {propagate}", sendPublishRequest.Topic, sendPublishRequest.OriginId, sendPublishRequest.Retain, sendPublishRequest.Propagate); sender.Publish(sendPublishRequest.Topic, sendPublishRequest.Message, sendPublishRequest.Retain, false); } }; } }
public SyncManager(IServiceProvider serviceProvider, ILogger <SyncManager> logger, DbContextTypeContainer contextTypeContainer, SyncContext syncContext) { this.logger = logger; this.contextTypeContainer = contextTypeContainer; this.syncContext = syncContext; sapphireSyncModule = (ISapphireSyncModule)serviceProvider.GetService(typeof(ISapphireSyncModule)); if (sapphireSyncModule != null) { sapphireSyncModule.SyncRequestRequestReceived += request => { if (request.OriginId == syncContext.SessionId) { return; } if (request.Propagate) { Publish(request); } if (request is SendChangesRequest sendChangesRequest) { Type dbType = contextTypeContainer.GetContext(sendChangesRequest.DbName); if (dbType != null) { SapphireChangeNotifier changeNotifier = (SapphireChangeNotifier)serviceProvider.GetService(typeof(SapphireChangeNotifier)); logger.LogInformation("Handling changes from other server"); logger.LogDebug( "Handling {ChangeCount} changes of {DbType} from server with OriginId {OriginId}. Propagate: {Propagate}", sendChangesRequest.Changes.Count, dbType.Name, sendChangesRequest.OriginId, sendChangesRequest.Propagate); sendChangesRequest.Changes.ForEach(change => { KeyValuePair <Type, string> property = dbType.GetDbSetType(change.CollectionName); JObject rawValue = change.Value as JObject; change.Value = rawValue?.ToObject(property.Key); if (change.State == ChangeResponse.ChangeState.Modified && change.OriginalValue != null) { JObject rawOriginalValue = change.OriginalValue as JObject; change.OriginalValue = rawOriginalValue?.ToObject(property.Key); } }); changeNotifier.HandleChanges(sendChangesRequest.Changes, dbType); } } else if (request is SendMessageRequest sendMessageRequest) { SapphireMessageSender sender = (SapphireMessageSender)serviceProvider.GetService(typeof(SapphireMessageSender)); logger.LogInformation("Handling message from other server"); logger.LogDebug( "Handling message for filter {Filter} from server with OriginId {OriginId}. Propagate: {Propagate}", sendMessageRequest.Filter, sendMessageRequest.OriginId, sendMessageRequest.Propagate); sender.Send(sendMessageRequest.Message, sendMessageRequest.Filter, sendMessageRequest.FilterParameters, false); } else if (request is SendPublishRequest sendPublishRequest) { SapphireMessageSender sender = (SapphireMessageSender)serviceProvider.GetService(typeof(SapphireMessageSender)); logger.LogInformation("Handling publish from other server"); logger.LogDebug( "Handling publish to topic {Topic} from server with OriginId {OriginId}. Retain: {Retain}, Propagate: {Propagate}", sendPublishRequest.Topic, sendPublishRequest.OriginId, sendPublishRequest.Retain, sendPublishRequest.Propagate); sender.Publish(sendPublishRequest.Topic, sendPublishRequest.Message, sendPublishRequest.Retain, false); } }; } }