////////////////////////////////////////////////////////////////////////////
// CConsruction クラスのインタフェース宣言
// 主筆サーバとの接続を管理する
////////////////////////////////////////////////////////////////////////////

#if !defined( CONSRUCTION_H_INCLUDED_ )
#define CONSRUCTION_H_INCLUDED_

#include "TaEdit_std.h"
#include "DoorClient.h"

#include <Xm/XmAll.h>

class CConsruction
{
public:
	CConsruction();
	~CConsruction();

	// 初期化
	bool Initialize();

	// 破棄
	void Clear();

	// ファイルを開く
	CErrorBool OpenFile( const string &FName, bool *pComplateFlg );

	// 新規作成
	CErrorBool NewFile( bool *pComplateFlg );

	// 名前を付けて保存
	CErrorBool WriteFile( const string &FName, bool *pComplateFlg );

	// 終了
	CErrorBool OnExit();

	// コンストラクションモードから切り離すか否か
	bool GetDetachConstruction() const;

	// 新しく主筆を起動してファイルを開く
	CErrorBool OpenFileWithNewWnd( const string &FName, int Line, bool *pComplateFlg );

	// コンストラクション・モードへの参加を通知する
	CErrorBool NoticeJoin( const string &FName );

	// コンストラクション・モードからの脱退を通知する
	CErrorBool NoticeUnJoin();
protected:
	string AttachFile( int pid, const char *prefix, int fd ) const;
	CErrorBool SetEventToServer( const CNegCmd &negcmd, bool *pComplateFlg );
	bool OpenDoor();
	bool StartServer();

	// サーバからのメッセージの受信
	void ReceiveMsg( int src );

	// サーバからのメッセージ受信関数
	static void ReceiveMsg_entry( XtPointer ptr, int *source, XtInputId *id );

	bool Activatewindow( const CNegCmd &rCmd );


	int toSvrFD;	// サーバからのメッセージを受け取るディスクリプタ
	int fromSvrFD;	// サーバへメッセージを送信するディスクリプタ
	string toSvrFileName;	// サーバ->主筆へのメッセージ送信用パイプのファイル名
	string fromSvrFName;	// 主筆->サーバへのメッセージ送信用パイプのファイル名
	CDoorClient Door;	// door
	bool EnableInputSource;	// Xtへの入力ソースの登録が有効か否か
	XtInputId InputID;	// Xtに登録した入力ソースのID

	// コンストラクションモードから切り離すか否か
	bool DetachConstruction;
};

#endif // CONSRUCTION_H_INCLUDED_

