HylaClient.h
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:3k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: HylaClient.h,v 1.1.1.1 2005/11/11 21:32:02 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1995-1996 Sam Leffler
  4.  * Copyright (c) 1995-1996 Silicon Graphics, Inc.
  5.  * HylaFAX is a trademark of Silicon Graphics
  6.  *
  7.  * Permission to use, copy, modify, distribute, and sell this software and 
  8.  * its documentation for any purpose is hereby granted without fee, provided
  9.  * that (i) the above copyright notices and this permission notice appear in
  10.  * all copies of the software and related documentation, and (ii) the names of
  11.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  12.  * publicity relating to the software without the specific, prior written
  13.  * permission of Sam Leffler and Silicon Graphics.
  14.  * 
  15.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  18.  * 
  19.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  20.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  21.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  24.  * OF THIS SOFTWARE.
  25.  */
  26. #ifndef _HylaClient_
  27. #define _HylaClient_
  28. /*
  29.  * HylaFAX Client Support.
  30.  */
  31. #include "Str.h"
  32. #include "IOHandler.h"
  33. #include "Dictionary.h"
  34. typedef unsigned short tseq_t;
  35. class HylaClient;
  36. fxDECLARE_StrKeyDictionary(HylaClientDict, HylaClient*)
  37. class HylaClient {
  38. public:
  39.     class SchedReaper : public IOHandler {
  40.     private:
  41. bool started;
  42.     public:
  43. SchedReaper();
  44. ~SchedReaper();
  45. void timerExpired(long, long);
  46. void start();
  47.     };
  48. private:
  49.     int fifo; // cached open file descriptor
  50.     fxStr fifoName; // associated FIFO filename
  51.     u_short refs; // # of Triggers referencing this client
  52.     tseq_t seqnum; // per-client message sequence number
  53.     tseq_t lrunum; // sequence number for LRU reclaim of fd's
  54.     bool reap; // client should be reaped
  55.     static tseq_t lruseq; // master sequence # generator for LRU
  56.     static HylaClientDict clients; // master table of clients
  57.     static SchedReaper schedReaper; // hook for reclaiming dead clients
  58.     friend class HylaClient::SchedReaper;
  59.     friend class Trigger;
  60.     HylaClient(const fxStr& fifoName);
  61.     static bool reapFIFO();
  62.     void schedReap();
  63. public:
  64.     ~HylaClient();
  65.     static HylaClient& getClient(const fxStr& fifoName);
  66.     static void purge();
  67.     void inc();
  68.     void dec();
  69.     tseq_t getSeqnum() const;
  70.     bool send(const char* msg, u_int msgLen);
  71. };
  72. inline void HylaClient::inc() { refs++; }
  73. inline void HylaClient::dec() { if (--refs == 0) delete this; }
  74. inline tseq_t HylaClient::getSeqnum() const { return seqnum; }
  75. #endif /* _HylaClient_ */