////////////////////////////////////////////////////////////////////////////
// CServer クラスのインタフェース宣言
//
////////////////////////////////////////////////////////////////////////////

#if !defined( SERVER_H_INCLUDED_ )
#define SERVER_H_INCLUDED_

#include <string>
#include <door.h>
#include "Semaphore.h"

#include "SyInstance.h"

using namespace std;

class CServer
{
public:
	CServer( CSyInstance *pI );
	~CServer();

	bool StartServer( const char *pFName, int fd );

	// doorとして公開される手続き
	void Door( char *argp, size_t arg_size, door_desc_t *dp, uint_t desc );

protected:
	// doorサーバの状態を確認
	bool EnableDoorServer( const char *pFName );

	string DoorFileName;	// doorのファイル名
	CSemaphore semaWait;	// 処理終了の待ち合わせ用
	CSemaphore semaAcsInstance;	// 主筆インスタンスへのアクセスの排他制御用
	bool IsRevoked;			// サーバが終了したか否か

	// 主筆インスタンス管理オブジェクト
	CSyInstance *pInstanceMgr;
};

#endif // SERVER_H_INCLUDED_

