// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: acquire-worker.h,v 1.1 1998/10/15 06:59:59 jgg Exp $
+// $Id: acquire-worker.h,v 1.11 1999/10/18 00:37:35 jgg Exp $
/* ######################################################################
Acquire Worker - Worker process manager
+ Each worker class is associated with exaclty one subprocess.
+
##################################################################### */
/*}}}*/
#ifndef PKGLIB_ACQUIRE_WORKER_H
// Interfacing to the method process
class pkgAcquire::Worker
{
+ friend pkgAcquire;
+
protected:
+ friend Queue;
+
+ /* Linked list starting at a Queue and a linked list starting
+ at Acquire */
+ Worker *NextQueue;
+ Worker *NextAcquire;
+ // The access association
Queue *OwnerQ;
- MethodConfig *Config;
- Worker *Next;
+ pkgAcquireStatus *Log;
+ MethodConfig *Config;
+ string Access;
+
+ // This is the subprocess IPC setup
+ pid_t Process;
+ int InFd;
+ int OutFd;
+ bool InReady;
+ bool OutReady;
- friend Queue;
+ // Various internal things
+ bool Debug;
+ vector<string> MessageQueue;
+ string OutQueue;
+
+ // Private constructor helper
+ void Construct();
+
+ // Message handling things
+ bool ReadMessages();
+ bool RunMessages();
+ bool InFdReady();
+ bool OutFdReady();
+
+ // The message handlers
+ bool Capabilities(string Message);
+ bool SendConfiguration();
+ bool MediaChange(string Message);
+
+ bool MethodFailure();
+ void ItemDone();
public:
- bool Create();
+ // The curent method state
+ pkgAcquire::Queue::QItem *CurrentItem;
+ string Status;
+ unsigned long CurrentSize;
+ unsigned long TotalSize;
+ unsigned long ResumePoint;
+
+ // Load the method and do the startup
+ bool QueueItem(pkgAcquire::Queue::QItem *Item);
+ bool Start();
+ void Pulse();
+ inline const MethodConfig *GetConf() const {return Config;};
- Worker(Queue *OwnerQ);
+ Worker(Queue *OwnerQ,MethodConfig *Config,pkgAcquireStatus *Log);
Worker(MethodConfig *Config);
~Worker();
};