00001 using System;
00002 using System.Threading;
00003 using Common;
00004
00005 namespace Server
00006 {
00010 public class BackgroundFetcher {
00011 MCP masterControl;
00012 HTTPObjectQueue fetchQueue;
00013 Thread processingThread;
00014
00015 public BackgroundFetcher(MCP masterControl) {
00016 this.masterControl = masterControl;
00017 fetchQueue = new HTTPObjectQueue();
00018 processingThread = new Thread(new ThreadStart(run));
00019 }
00020
00021 public void AddToFetchQueue(HTTPRequestQueueObject request) {
00022 fetchQueue.EnqueueBlocking(request);
00023 }
00024
00025 public void Start() {
00026 processingThread.Start();
00027 }
00028
00029 public void Stop() {
00030 processingThread.Abort();
00031 }
00032
00033 void run() {
00034 try {
00035 while(true) {
00036 HTTPRequestQueueObject request = (HTTPRequestQueueObject)fetchQueue.DequeueBlocking();
00037 Console.WriteLine("- Background fetching {0}", request.URI);
00038 HTTPResponse response = masterControl.ServiceHTTPRequest(request);
00039 masterControl.SendResponse(response, request, true);
00040 Thread.Sleep(10);
00041 }
00042 } catch (ThreadAbortException) {
00043 Console.WriteLine("[Background Fetcher shut down]");
00044 }
00045 }
00046 }
00047 }