Example #1
0
        /// <summary>
        /// ServiceHandler Private Constructor
        /// </summary>
        private ServiceHandler()
        {
            syncServiceWorker  = new SyncServiceWorker();
            asyncServiceWorker = AsyncServiceWorker.GetInstance();

            resourceManager = ResourceManager.GetInstance();
        }
        /// <summary>
        /// It provides AsyncServiceWorker singleton instance
        /// </summary>
        /// <returns>AsyncServiceWorker singleton instance</returns>
        public static AsyncServiceWorker GetInstance()
        {
            if (asyncServiceWorker == null)
            {
                asyncServiceWorker = new AsyncServiceWorker();
            }

            return(asyncServiceWorker);
        }
        /// <summary>
        /// It provides AsyncServiceWorker singleton instance
        /// </summary>
        /// <returns>AsyncServiceWorker singleton instance</returns>
	    public static AsyncServiceWorker GetInstance() 
        {
		
		    if(asyncServiceWorker == null) 
            {
			    asyncServiceWorker = new AsyncServiceWorker();
		    }
		
		    return asyncServiceWorker;
	    }
        /// <summary>
        /// It is the inner class of Async service worker which processes all the requests in the queue
        /// </summary>
        public void HandleRequests()
        {
            Connect.Model.ServiceRequest[] services = null;
            try
            {
                services = (Connect.Model.ServiceRequest[]) new Connect.Model.ServiceRequest().Select().Execute();
            }
            catch (SiminovException se)
            {
                Log.Error(this.GetType().Name, "HandleRequests", "SiminovException caught while getting queue services, " + se.GetMessage());
                throw new SiminovCriticalException(this.GetType().Name, "HandleRequests", "SiminovException caught while getting queue services, " + se.GetMessage());
            }

            if (services == null || services.Length <= 0)
            {
                AsyncServiceWorker.GetInstance().StopWorker();
                return;
            }

            for (int i = 0; i < services.Length; i++)
            {
                Connect.Model.ServiceRequest service = services[i];
                IService iService = null;

                try
                {
                    iService = serviceUtils.Convert(service);
                }
                catch (ServiceException se)
                {
                    Log.Error(this.GetType().Name, "HandleRequests", "ServiceException caught while converting service to iService, " + se.GetMessage());
                    return;
                }


                /*
                 * Check Network Connectivity.
                 */
                if (!Utils.Utils.HasCoverage())
                {
                    try
                    {
                        asyncServiceWorkerThread.Wait();
                    }
                    catch (System.Exception e)
                    {
                        Log.Error(this.GetType().Name, "HandleRequests", "Exception caught while putting async service worker thread into wait state, " + e.Message);
                        return;
                    }
                }


                /*
                 * Service Resumed
                 */
                iService.OnResume();
                Handle(iService);
            }

            AsyncServiceWorker.GetInstance().StopWorker();
        }