www.pudn.com > AirAPIF.rar > AirAPIF.h


/* Copyright (C) FUJITSU LIMITED 1999-2001 */ 
/* $Id: AirAPIF.h,v 1.6 2001/03/05 15:57:43 JST age Exp $ */ 
/* This header file is public for users */ 
/* 
 * $Log: AirAPIF.h,v $ 
 * Revision 1.6  2001/03/05 15:57:43 JST  age 
 * 古川  AIR_EVENT_SYMBOLPORT 追加 
 * 
 * Revision 1.5  2000/06/26 15:12:47 JST  age 
 * 古川  arch_list 追加 
 * 
 * Revision 1.4  2000/05/22 18:53:29 JST  age 
 * 古川  friend 追加 
 *       get_part_name 引数の型変更 
 * 
 * Revision 1.3  2000/03/13 15:51:57 JST  age 
 * AirEventType の修正 
 * 
 * Revision 1.2  2000/03/03 17:09:45 JST  age 
 * *** empty log message *** 
 * 
 * $Com: 古川  AIR_EVENT_SYMBOLPORT 追加 
 */ 
 
 
#ifndef AIR_APIF_H 
#define AIR_APIF_H 
 
#include  
#include  
#include  
#include  
#include "air_defs.h" 
#include "air_tabledef.h" 
 
class AirPart; 
class AirArch; 
class AirCfEnv; 
class AirCfMsg; 
 
 
enum AirEventKind { AIR_EVENT_APIF, AIR_EVENT_PART, AIR_EVENT_ARCH, 
                    AIR_EVENT_BLOCK, AIR_EVENT_PORT, AIR_EVENT_NET, 
                    AIR_EVENT_PAGE, AIR_EVENT_GROUP, AIR_EVENT_COMPONENT, 
                    AIR_EVENT_COMPONENTPORT, AIR_EVENT_SYMBOL, 
                    AIR_EVENT_SYMBOLPORT, AIR_EVENT_APPL, AIR_EVENT_KIND_NUM }; 
enum AirEventType { AIR_EVENT_ADD, AIR_EVENT_DEL, AIR_EVENT_MOD, AIR_EVENT_SEQ, 
                    AIR_EVENT_ASK, AIR_EVENT_TYPE_NUM }; 
enum AirEventMode { AIR_EVENT_BEFORE, AIR_EVENT_AFTER, AIR_EVENT_MODE_NUM }; 
enum AirEventOrder { AIR_EVENT_FIRST, AIR_EVENT_LAST }; 
typedef int32_t (*AirEventHandler)(AirArch* arch,    // event handler 
                                AirDBKind kind, 
                                AirDBAnyRef obj); 
 
class AirAPIF { 
    friend class AirPart; 
    friend class AirArch; 
    friend class AirIfArch; 
    friend class AirSeq; 
    friend ostream& operator<<(ostream& ostr, const AirAPIF& a); 
 
private: 
    char* program_name;                           // プログラム名 
    char* program_version;                        // プログラムバージョン 
    time_t program_date;                          // プログラム作成日付 
 
    uid_t uid;                                    // UID 
    char* username;                               // 実行者名 
    char* hostname;                               // ホスト名 
    char* hostip;                                 // ホストIPアドレス 
    pid_t pid;                                    // PID 
    char* cwd;                                    // カレントディレクトリ 
 
    AirCfEnv *env;                                // APIF 関数システムの環境 
    AirCfMsg *msg;                                // メッセージ環境 
 
    char* logfile;                                // ログファイル名 
    ofstream outlog;                              // ログ出力先 
 
    deque event[AIR_EVENT_KIND_NUM] // event前ハンドラ配列 
                                [AIR_EVENT_TYPE_NUM] 
                                [AIR_EVENT_MODE_NUM]; 
 
    static bool inhandler_f;                      // event handler 実行中か 
    bool noleft_access_f;                         // アクセス記録を残さないか 
 
    deque part_list;                    // アクセス中のPart達 
    AirPart* activate_part;                       // 活性化しているPart 
 
    deque arch_list;                  // アクセス中のArch達 
    AirArch* activate_arch;                       // 活性化しているArch 
 
 
public: 
    AirAPIF(void);                                // コンストラクタ 
    ~AirAPIF(void);                               // デストラクタ 
 
public: 
    int32_t init(int argc, char* argv[],          // APIF初期化 
                 const char* opt = AIR_ENV_OPT); 
    int32_t release(void);                        // APIF終了化 
    int32_t set_program(char* name,               // プログラム設定 
                        char* version, 
                        time_t date); 
    int32_t logging(const char* file);            // ログファイルの設定 
    int32_t logoff(void);                         // 実行ログ記録の終了 
 
    int32_t add_handler(AirEventHandler handler,  // event handler の追加 
                        AirEventKind kind, 
                        AirEventType type, 
                        AirEventMode mode, 
                        AirEventOrder order); 
    int32_t del_handler(AirEventHandler handler,  // event handler の削除 
                        AirEventKind kind, 
                        AirEventType type, 
                        AirEventMode mode); 
 
    int32_t line_editor(const char* inputstring); // 言語入力 
 
    int32_t get_part_num(const char* dirname);    // パート数の獲得 
    int32_t get_part_name(const char* dirname,    // パート名の獲得 
                          char**& partname, int32_t& partname_num); 
 
private: 
    int32_t before_event(AirEventKind kind,       // 実行前 event 実行 
                         AirEventType type, 
                         AirDBAnyRef obj); 
    int32_t after_event(AirEventKind kind,        // 実行後 event 実行 
                        AirEventType type, 
                        AirDBAnyRef obj); 
    int32_t exec_event(AirEventKind kind,         // event 実行 
                       AirEventType type, 
                       AirEventMode mode, 
                       AirDBAnyRef obj); 
 
public: 
    int32_t noleft_access(bool flag = true);      // アクセスを残さない 
}; 
 
 
#endif /* AIR_APIF_H */