~~NOTOC~~ ---json { "canonical":"projects:bbs_pm:docs:bbs", "title":"BBS", "description":"BBS" } --- \\ ====== BBS ====== BBS.pmはサーバアプリケーションを構築するためのコアモジュールです。\\ BBS.pm側にあるサーバシステムの操作やサーバシステムとアプリケーションとのデータのやり取りを提供する関数を呼び出すことで行います。\\ \\ ===== システム関連 =====
BBS.pmのオブジェクト作成とサーバの開始処理を行います。\\ ^ 関数名 ^ 操作 ^ | [[.:s_new|new()]] | オブジェクトを作成します | | [[.:s_init|_init()]] | 属性を初期化します | | [[.:s_load|_load()]] | モジュールに含まれるローダルーチンを呼び出します | | [[.:s_from|from()]] | 応対中するノード番号を返します | | [[.:s_start|start()]] | サーバを開始します | | [[.:s_disconnect|disconnect()]] | 切断イベント処理を呼び出します |
\\ ===== ノード関連 =====
ノードの接続または切断のステータス管理やノードが持つデータテーブル(ノードテーブル)の管理を行います。\\ 内部処理は[[.:node:|Node(ノード制御)]]が行っています。\\ ^ 関数名 ^ 操作 ^ | [[.:n_nodes|nodes()]] | 接続ノード一覧を返します | | [[.:n_node|node()]] | ノードのデータ領域を返します | | [[.:n_from_node|from_node()]] | ノードのデータ領域を返します |
\\ ===== イベント関連 =====
本システムは発動するイベントによって各々の処理を行います。\\ イベントは次の7つになります。\\ ^ イベント名 ^ 条件 ^ | onConnect | 新たなノードが接続したとき | | onDisconnect | 接続するノードが何らかの理由で切断されたとき | | onSend | 関数send()が呼び出されたとき | | onRecv | onAccessイベントでノードからデータを受信したとき | | Output | ノードに対してデータの出力処理を行う | | SysWork | アプリケーションのシステム処理を行う | | AppWork | アプリケーション処理を行う | 各イベント処理ではハンドラの呼び出しが行われますが、onConnect, onDisconnectでは 接続維持のための処理、onSend, onRecvではイベントとハンドラでのデータの受け渡しが行われます。\\ ※onSendのイベント処理は[[#通信関連|関数send()]]に内包しているため、関数として定義していません。\\ ^ 関数名 ^ 操作 ^ | [[.:e_onconnect|_onconnect()]] | 接続イベント処理 | | [[.:e_ondisconnect|_ondisconnect()]] | 切断イベント処理 | | [[.:e_onrecv|_onrecv()]] | 受信イベント処理 | | [[.:e_serve|_serve()]] | サーバイベント処理 | | [[.:e_output|_output()]] | 出力処理 | | [[.:e_syswork|_syswork()]] | アプリケーションシステム処理 | | [[.:e_appwork|_appwork()]] | アプリケーション処理 |
\\ ===== ハンドラ関連 =====
イベントが発生したときに任意の処理を行うためのハンドラが設けられています。\\ ハンドラは次の7つです。\\ ^ ハンドラ名 ^ ハンドラ種別 ^ 目的 ^ | onConnect | システム | 接続したクライアントに対する準備(初期)処理を行います。 | | onDisconnect | システム | 切断するクライアントに対する終了処理を行います。 | | onSend | システム | クライアントへ送信するデータの処理を行います。 | | onRecv | システム | クライアントから受信したデータの処理を行います。 | | Output | システム | クライアントへデータを送出します。 | | SysWork | システム | アプリケーションのシステム処理を行います。 | | AppWork | アプリケーション | アプリケーション(または応答)処理を行います。 | ハンドラにはシステムハンドラとアプリケーションハンドラの2種類があります。\\ システムハンドラはノードとの接続、切断、通信、また、アプリケーションシステムの処理などのイベントが発生することで呼び出されます。 システムハンドラのルーチン設定はサーバ開始前に行い、サーバ実行中に設定を変更するようなことはまずありません。\\ アプリケーションハンドラはアプリケーション処理(AppWork)イベントが発生したときに呼び出されますが、 このハンドラは各ノードごとに設けられていて、イベントが発生すると接続する全てのノードを順番に呼び出します。 アプリケーションハンドラの設定はサーバ開始後に行い、ノードの要求や状態によって処理を切り替えることでさまざまな振る舞いを行うことができます。\\ 内部処理は[[.:handler:|Handler(ハンドラ制御)]]が行っています。\\ ^ 関数名 ^ 操作 ^ | [[.:h_setsyshandler|setsyshandler()]] | システムハンドラの設定 | | [[.:h_setapphandler|setapphandler()]] | アプリケーションハンドラの設定 | | [[.:h_sethandler|sethandler()]] | アプリケーションハンドラの設定 |
\\ ===== 通信関連 =====
BBS.pmの通信処理はハンドラによって行うため、一般的な方法とは違ったアプローチで通信を行います。\\ 受信についてはonRecvイベントからハンドラを介して受信データを取得するので、受信を行うための関数はありません。 送信については送信を行うための関数を提供しています。\\ ^ 関数名 ^ 操作 ^ | [[.:c_send|send()]] | ソケットへデータを送信する | | [[.:c_from_send|from_send()]] | ソケットへデータを送信する |
\\ ===== その他 =====
実験的機能やおまけ機能を定義しています。\\ ^ 関数名 ^ 操作 ^ | [[.:o_termtrap|termtrap()]] | プログラムの中断を無効化します |
~~DISCUSSION~~