[Regnessem-devel] SimpleLogについて

Back to archive index

-rao- hjmr9****@yahoo*****
2003年 5月 4日 (日) 04:29:06 JST


今のSimpleLogの実装はSimpleUIに負っているところが多すぎますので,
まずはSimpleUIのほうの実装を変えたほうが良いと思っています.
表示をSimpleUIに任せるというのはやめて,必要ならSimpleLogのほうで表示す
る(すなわちUFrmHistoryはSimpleUIから外す)べきだと思います.

まだ細かいところは固まっていませんが,UIサービスというサービスのカテゴリ
を作り,UIサービスが登録されていれば,プロトコルプラグインのUIサービスは
当該プロトコル接続の右クリックメニューに,AddInプラグインのUIサービスは
全てのプロトコルの右クリックメニューに自動的に登録されるというように
SimpleUIの動作を変更することを考えています.

プラグイン側は右クリックメニューに登録したいUIサービスを登録するだけです.

----- UIサービスの仕様 -----
1) UIサービスの登録
右クリックメニューに登録したい項目があるプラグインは
プロトコルプラグインの場合:
 /Protocol/<プロトコル名>/Connection/UIService/Member/<サービス名>
 /Protocol/<プロトコル名>/Connection/UIService/Group/<サービス名>
 /Protocol/<プロトコル名>/Connection/UIService/Tab/<サービス名>
AddInプラグインの場合:
 /AddIn/<名前>/UIService/Member/<サービス名>
 /AddIn/<名前>/UIService/Group/<サービス名>
 /AddIn/<名前>/UIService/Tab/<サービス名>
というUIサービスを登録します.

これらのサービスは右クリックメニューに登録されます.

2) UIサービスの実装
UIサービスの仕様は以下の通り.

Integer TNsmServiceProc(Cardinal wParam, Cardinal lParam);
wParam: HNsmConnection. 0の時はメニューに登録するキャプションの取得要求
lParam: struct TNsmServiceInfoへのポインタ

struct TNsmServiceInfo {
  Integer cbSize;     // 構造体のサイズ=sizeof(TNsmServiceInfo)
  Integer nGroupId;   // グループID
  LPCTSTR lpAccount;  // アカウント名
  PNsmInfo lpInfo;    // 情報設定用
  Integer nFlags;     // 予約
};

[引数の内容]
a) wParam = 0(キャプション取得要求)の場合
nGroupId = 不定
lpAccount = 不定
lpInfo->nType = NMIT_WIDESTRING
lpInfo->lpBuffer = バッファ
lpInfo->nBufferSize = lpBufferの大きさ

b) wParam != 0(サービス実行)の場合
b-1) クリックされた対象がメンバの場合
(〜/UIService/Member/〜が呼び出された場合)
nGroupId = メンバの所属するグループのID
lpAccount = メンバのアカウント名
lpInfo = NULL

b-2) クリックされた対象がグループの場合
(〜/UIService/Group/〜が呼び出された場合)
nGroupId = グループのID
lpAccount = NULL
lpInfo = NULL

[返り値]
失敗した場合 0
成功した場合 0以外
a) wParam = 0(キャプション取得要求)の場合には以下の情報も返す
lpInfo->nType = NMIT_WIDESTRING
lpInfo->lpBuffer = メニューに設定するキャプション
lpInfo->nBufferSize = lpBufferの大きさ
設定例
  wcsncpy(lpInfo->lpBuffer, <キャプション>, (lpInfo->nBufferSize)/2);

3) 特殊なUIサービス
これまでのプラグインとの互換性維持のため,上記のフォーマットのUIサービス
以外に,以下のUIサービスは対応するキャプションと共に右クリックメニューに
登録される.

サービス,メニュー項目
/Protocol/<プロトコル名>/Session/Open,"メッセージの送信"
/Protocol/<プロトコル名>/Connection/AddMember,"新しいメンバの追加"
/Protocol/<プロトコル名>/Connection/RemoveMember,"メンバの削除"
/Protocol/<プロトコル名>/Connection/AddGroup,"新しいグループの追加"
/Protocol/<プロトコル名>/Connection/RemoveGroup,"グループの削除"
/Protocol/<プロトコル名>/Connection/ChangeGroupName,"グループ名の変更"
----- ここまで -----

例えば,ログ表示プラグイン(ログ記録プラグインと同じプラグインとして実装
しても良いし,独立でも良い)は,"ログ表示" というキャプションで
/AddIn/LogViewer/UIService/Member/ViewLog
というサービスを登録しておき,当該メンバのログを表示すれば良い.ログのフォー
マットや,どのように表示するかはログ記録プラグインとログ表示プラグインに
任せる.

という感じです.

-Rao-


__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/




Regnessem-devel メーリングリストの案内
Back to archive index