/// <summary> /// Handles sync request /// </summary> /// <param name="syncRequest">Sync Request</param> public void Handle(ISyncRequest syncRequest) { SyncDescriptor syncDescriptor = resourceManager.GetSyncDescriptor(syncRequest.GetName()); long requestTimestamp = 0; if (requestTimestamps.ContainsKey(syncRequest)) { requestTimestamp = requestTimestamps[syncRequest]; } if (requestTimestamp <= 0) { syncWorker.AddRequest(syncRequest); requestTimestamps.Add(syncRequest, DateTime.Now.Ticks); return; } long syncInterval = syncDescriptor.GetSyncInterval(); long lastRefreshTimestamp = requestTimestamps[syncRequest]; long currentTimestamp = DateTime.Now.Ticks; long timeDifference = lastRefreshTimestamp + syncInterval; if (timeDifference < currentTimestamp) { syncWorker.AddRequest(syncRequest); requestTimestamps.Add(syncRequest, DateTime.Now.Ticks); } }
public override void StartElement(XmlReader reader, IDictionary <String, String> attributes) { String localName = reader.Name; tempValue = new StringBuilder(); if (localName.Equals(Constants.SYNC_DESCRIPTOR_PROPERTY)) { propertyName = attributes[Core.Constants.APPLICATION_DESCRIPTOR_NAME]; } else if (localName.Equals(Constants.SYNC_DESCRIPTOR, StringComparison.OrdinalIgnoreCase)) { syncDescriptor = new SyncDescriptor(); } }
public void HandleRequests() { IEnumerator <ISyncRequest> requests = syncRequests.GetEnumerator(); ICollection <ISyncRequest> removeRequests = new List <ISyncRequest>(); while (requests.MoveNext()) { ISyncRequest syncRequest = requests.Current; /* * Fire Sync Started Event */ ISyncEvents syncEventHandler = resourceManager.GetSyncEventHandler(); if (syncEventHandler != null) { syncEventHandler.OnStart(syncRequest); } /* * Process Request */ SyncDescriptor refreshDescriptor = resourceManager.GetSyncDescriptor(syncRequest.GetName()); IEnumerator <String> services = refreshDescriptor.GetServiceDescriptorNames(); while (services.MoveNext()) { String service = services.Current; String serviceName = service.Substring(0, service.IndexOf(Constants.SYNC_DESCRIPTOR_SERVICE_SEPARATOR)); String requestName = service.Substring(service.IndexOf(Constants.SYNC_DESCRIPTOR_SERVICE_SEPARATOR) + 1, service.Length - (service.IndexOf(Constants.SYNC_DESCRIPTOR_SERVICE_SEPARATOR) + 1)); ServiceDescriptor serviceDescriptor = resourceManager.RequiredServiceDescriptorBasedOnName(serviceName); ServiceDescriptor.Request api = serviceDescriptor.GetRequest(requestName); String apiHandler = api.GetHandler(); IService serviceHandler = (IService)ClassUtils.CreateClassInstance(apiHandler); serviceHandler.SetServiceDescriptor(serviceDescriptor); IEnumerator <String> resources = syncRequest.GetResources(); while (resources.MoveNext()) { String resourceName = resources.Current; Object resourceValue = syncRequest.GetResource(resourceName); serviceHandler.AddResource(resourceName, resourceValue); } serviceHandler.Invoke(); } /* * Fire Sync Started Event */ if (syncEventHandler != null) { syncEventHandler.OnFinish(syncRequest); } removeRequests.Add(syncRequest); } foreach (ISyncRequest removeRequest in removeRequests) { syncRequests.Remove(removeRequest); } syncWorkerThread = null; }