Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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;
        }