The client program will be made as simple as possible, keeping the duplication of code to a minimum while allowing full functional control of the client machine. The RPC calls that the client program will make will need to be locked with a semaphore because the program will have multiple processes. The client program can be run in two modes, daemon and normal. In daemon mode, the client will start the XMLRPC server and keep it active indefinitatly. This mode will accept poll_now requests from the scire server. In normal mode, there will be a process of steps that will execute and then the program will end. The program will fork off a subprocess to handle polling and downloading of jobs. This process will register and make an RPC call to the scire server asking for jobs. If the scire server replies with jobs it will download the XML file and save it in the queue. When done downloading all jobs, the polling process will sleep for the interval of the poll_interval variable. After that time if the main process is not currently making an RPC call, and the client program is still running, it will poll the scire server again for jobs. This procedure will continue as long as the program is running. The main thread will stat the queue directory after forking the polling subprocess. It will look in sorted order at the queue and if it finds a job it will take the highest priority, oldest job first. When the job is complete it will send an RPC call (or wait until it is able to) to the scire server updating the status of the job, and then stat the queue directory again and execute the next job (if there is one). In normal mode it will continue in this process until at least one poll/download has completed and there are no remaining jobs and then quit. In daemon mode it will continue until stopped.