public void Authorized() { var result1 = _processor.Upload(new UploadDataRequest() { ChangeNotifications = new[] { new UploadRequestItem() { PrimaryKey = "123", Type = "DbSyncObject", SerializedObject = JsonConvert.SerializeObject(new DbSyncObject() { Id = "123", Text = "zxc", Tags = "u1" }), } } }, new LimitedUser()); var result = _processor.Download(new DownloadDataRequest() { LastChangeTime = new DateTimeOffset(DateTime.Now).AddHours(-1).ToDictionary(), Types = new[] { nameof(DbSyncObject) }, }, new LimitedUser(new[] { "u2" })); result.ChangedObjects.Should().BeEmpty(); var result2 = _processor.Download(new DownloadDataRequest() { LastChangeTime = new DateTimeOffset(DateTime.Now).AddHours(-1).ToDictionary(), Types = new[] { nameof(DbSyncObject) }, }, new LimitedUser(new[] { "u1" })); result2.ChangedObjects.Count.Should().Be(1); }
public void IdAutoIncrementInteger() { var db = _contextFunc(); db.IdIntObjects.Count().Should().Be(0); var controller = new RealmiusServerProcessor(new SyncConfigForCustomId(_contextFunc, typeof(IdIntAutogeneratedObject))); var objectToSave = new IdIntAutogeneratedObject() { Text = "123123123", }; db.IdIntAutogeneratedObjects.Add(objectToSave); db.SaveChanges(); var download = controller.Download( new DownloadDataRequest() { Types = new List <string>() { nameof(IdIntAutogeneratedObject) }, LastChangeTime = DateTimeOffset.Now.Subtract(TimeSpan.FromMinutes(1)).ToDictionary(), }, new { }); download.ChangedObjects.Count.Should().Be(1); var changedObject = download.ChangedObjects.First(); changedObject.MobilePrimaryKey.Should().BeEquivalentTo(objectToSave.Id.ToString()); changedObject.MobilePrimaryKey.Should().NotBeEmpty(); }
protected virtual void UserConnected(IRequest contextRequest, string connectionId) { var user = Processor.Configuration.AuthenticateUser(contextRequest); if (user == null) { CallUnauthorize(connectionId, new UnauthorizedResponse() { Error = "User not authorized" }); return; } Connections[connectionId] = user; var lastDownloadString = contextRequest.QueryString[Constants.LastDownloadParameterName]; Dictionary <string, DateTimeOffset> lastDownload; var userTags = Processor.GetTagsForUser(user); if (string.IsNullOrEmpty(lastDownloadString)) { var lastDownloadOld = contextRequest.QueryString[Constants.LastDownloadParameterNameOld]; if (string.IsNullOrEmpty(lastDownloadOld)) { lastDownload = new Dictionary <string, DateTimeOffset>(); } else { var date = DateTimeOffset.Parse(lastDownloadOld); lastDownload = userTags.ToDictionary(x => x, x => date); } } else { lastDownload = JsonConvert.DeserializeObject <Dictionary <string, DateTimeOffset> >(lastDownloadString); } var types = contextRequest.QueryString[Constants.SyncTypesParameterName]; var data = Processor.Download(new DownloadDataRequest() { LastChangeTime = lastDownload, Types = types.Split(','), }, user); data.LastChangeContainsNewTags = true; CallDataDownloaded(connectionId, data); foreach (var userTag in userTags) { Groups.Add(connectionId, userTag); } }
public void Deleted() { _contextFunc().DbSyncObjects.Count().Should().Be(0); var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(DbSyncObject))); var objectToSave = new DbSyncObject() { Text = "123123123", Id = Guid.NewGuid().ToString() }; var db = _contextFunc(); db.DbSyncObjects.Add(objectToSave); db.SaveChanges(); Func <DownloadDataResponse> getDownloaded = () => controller.Download(new DownloadDataRequest() { Types = new[] { nameof(DbSyncObject) }, }, new { }); var downloaded1 = getDownloaded(); downloaded1.ChangedObjects.Count.Should().Be(1); var result = controller.Upload(new UploadDataRequest() { ChangeNotifications = { new UploadRequestItem() { Type = nameof(DbSyncObject), PrimaryKey = objectToSave.MobilePrimaryKey, SerializedObject = "", IsDeleted = true, } } }, null); CheckNoError(result); _contextFunc().DbSyncObjects.Find(objectToSave.Id).Should().BeNull(); var downloaded2 = getDownloaded(); downloaded2.ChangedObjects.Count.Should().Be(0); //deleted items should not be downloaded during initial DB download }
public static void AddUserGroup(Func <TUser, bool> userPredicate, string group) { var connectionIds = Connections.Where(x => userPredicate(x.Value)); var connection = GlobalHost.ConnectionManager.GetConnectionContext <RealmiusPersistentConnection <TUser> >(); foreach (KeyValuePair <string, TUser> connectionId in connectionIds) { connection.Groups.Add(connectionId.Key, group); var tags = ProcessorStatic.GetTagsForUser(connectionId.Value); if (tags.Contains(group)) { continue; } tags.Add(group); //include data for the tag var changes = ProcessorStatic.Download(new DownloadDataRequest() { LastChangeTime = new Dictionary <string, DateTimeOffset>() { { group, DateTimeOffset.MinValue } }, Types = ProcessorStatic.Configuration.TypesToSync.Select(x => x.Name), OnlyDownloadSpecifiedTags = true, }, connectionId.Value); var downloadData = new DownloadDataResponse() { ChangedObjects = changes.ChangedObjects, LastChange = new Dictionary <string, DateTimeOffset>() { { group, DateTimeOffset.UtcNow } }, LastChangeContainsNewTags = true, }; connection.Connection.Send(connectionId.Key, MethodConstants.ClientDataDownloaded + Serialize(downloadData)); } }
public void Attach_NewObject() { var db = _contextFunc(); db.EnableSyncTracking = false; db.DbSyncObjects.Add(new DbSyncObject { Id = "2", Text = "x", }); db.SaveChanges(); db.CreateSyncStatusContext().SyncStatusServerObjects.Count().Should().Be(0); var res = _processor.Download( new DownloadDataRequest { Types = new[] { nameof(DbSyncObject) }, LastChangeTime = new Dictionary <string, DateTimeOffset> { { "all", DateTimeOffset.MinValue } }, }, _user); res.ChangedObjects.Count.Should().Be(0); db.EnableSyncTracking = true; db.AttachObject(nameof(DbSyncObject), "2"); db.CreateSyncStatusContext().SyncStatusServerObjects.Count().Should().Be(1); var res2 = _processor.Download( new DownloadDataRequest { Types = new[] { nameof(DbSyncObject) } }, _user); string.Join(", ", res2.ChangedObjects) .Should().BeEquivalentTo("Type: DbSyncObject, Key: 2, SerializedObject: { \"Text\": \"x\", \"Tags\": null, \"Id\": \"2\"}"); }
public void NoData() { var result = _controller.Download(new DownloadDataRequest { LastChangeTime = new Dictionary <string, DateTimeOffset> { { "all", DateTimeOffset.Now } }, Types = new[] { nameof(DbSyncObject) }, }, _user); result.ChangedObjects.Should().BeEmpty(); }
public void Upload_Delete_UploadAgain() { var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(DbSyncObject))); Func <DownloadDataResponse> getDownloaded = () => controller.Download(new DownloadDataRequest() { Types = new[] { nameof(DbSyncObject) }, }, new { }); Func <string> dataToCompare = () => { var data = getDownloaded(); return(string.Join(", ", data.ChangedObjects.Select(x => $"{x.IsDeleted}"))); }; var objectToSave = new DbSyncObject() { Text = "123123123", Id = Guid.NewGuid().ToString() }; var result1 = controller.Upload(new UploadDataRequest() { ChangeNotifications = { new UploadRequestItem() { Type = nameof(DbSyncObject), PrimaryKey = objectToSave.MobilePrimaryKey, SerializedObject = JsonConvert.SerializeObject(objectToSave), //IsDeleted = true, } } }, null); dataToCompare().Should().BeEquivalentTo("False"); var result2 = controller.Upload(new UploadDataRequest() { ChangeNotifications = { new UploadRequestItem() { Type = nameof(DbSyncObject), PrimaryKey = objectToSave.MobilePrimaryKey, SerializedObject = "", IsDeleted = true, } } }, null); //dataToCompare().Should().BeEquivalentTo("True"); objectToSave.Text = "zxc"; var result3 = controller.Upload(new UploadDataRequest() { ChangeNotifications = { new UploadRequestItem() { Type = nameof(DbSyncObject), PrimaryKey = objectToSave.MobilePrimaryKey, SerializedObject = JsonConvert.SerializeObject(objectToSave), IsDeleted = false, } } }, null); dataToCompare().Should().BeEquivalentTo("False"); }