- 追加された行はこの色です。
- 削除された行はこの色です。
[[開発/設計/議論]]
*議論の目的 [#tf5dce46]
-制御モジュール
-コントローラ部
--制御モジュールコントロール
--スクリプト(Router)
に、どのような機能を持たせるべきかを決定するための場所です。
*制御モジュール・コントローラ部の位置付け [#cd3f0fa6]
**制御モジュールの本質 [#sd5e26b4]
B2BUAにおいて、重要なコアとなる部分です。~
B2BUAとして考えるのであれば、これ以外の部分は不要であります!!!
***理由 [#j1567183]
-制御モジュール≒UA
であるため、これがあれば、B2BUAとして動作させることが出来るからです。~
ただし、この場合は、柔軟性がほとんどなくなる点が、「SIProp」との相違点と
なり、他の部分が必要となる理由となります。
**コントローラ部の存在理由 [#o48c6449]
下記のような役割を持たせたいために存在しています。
-制御モジュールを動的に呼び出す
--DIのような使い方を想定しています
-制御モジュールの処理結果の評価を行う
--制御モジュールの制御(コントロール)を行うことを想定しています~
制御モジュールを複数制御するような場合に使用します
***「制御モジュールを動的に呼び出す」の概要 [#oc1a2f87]
例えば、A-UA制御モジュールというものがあり、これに、
A-UA.Call()
という通話用のメソッドがあった場合と仮定します。~
そして、A-UAが、Ver.2.0になって、通話機能が変化してしまった場合
A-UA.CallForV2()
A-UA.CallForV1()
というものを用意するようなことを想定します。(別モジュールとして、用意し
てもよい。)
このような場合に、スクリプト部で、条件分けをして、メソッドをインジェクシ
ョンをさせるために使用します。
例:
if(userAgent == "v1") {
injection A-UA.CallForV1() in A-UA.Call();
} else if(userAgent == "v2"){
injection A-UA.CallForV2() in A-UA.Call();
} else {
injectionList A-UA.CallForV1() in A-UA.Call();
injectionList A-UA.CallForV2() in A-UA.Call();
}
※最後の「else句」は、1つにインジェクションが絞れない場合を表現していま
す。
***「制御モジュールの処理結果の評価を行う」の概要 [#m654fd66]
上記の「else句」部分のように、制御モジュールが並列起動となった場合、制御
モジュールのコントロールをしなければなりませんので、その機能を提供するた
めのものとなります。~
そして、この部分は、非常に複雑となるため、スクリプトでは表現しにくい部分
となります。(スレッド動作も必要となるため、JavaScriptでは制御しきれませ
ん。)
例:
var result = A-UAv1.Call();// A-UAv2.Call()も同様にして扱う。
// B2BUAモード
if(result == "B2BUA") {
A-UA.Send();
// パケットをスルーするだけモード
} else if(result == "THROW"){
A-UA.Sleep();
// それ以外。終了させる
} else {
A-UA.Stop();
}
具体的には、
A-UAコントロール部
というコントロール部があり、その内部で、
A-UAv1制御モジュール
A-UAv2制御モジュール
をコントロールするような構成となります。
**制御モジュール・コントローラ部のまとめ [#a86a5396]
簡単に言うと、一番べた〜と実装した場合が、最初に書いた
制御モジュールのみ
という構成となります。ただし、これでは、柔軟性がほとんど無くなります。~
そして、制御モジュールから、設定可能部分をすべてスクリプト化し、柔軟性をMaxにしたものが
スクリプト+制御モジュール
という構成となります。~
しかし、すべての制御をスクリプトで書くのは、現実的ではないため、SIPropで
は、
制御モジュールコントロール+スクリプト+制御モジュール
という構成を取っています。~
すなわち、スクリプトと制御モジュールが対極に位置しているイメージで、制御モジュールコントロールを踏まえて、柔軟性の落し所をどこに持ってくるのか?が、SIPropのポイントになると思っています。
*議論の論点 [#yc9bf9b7]
-制御モジュール
-コントローラ部
--制御モジュールコントロール
--スクリプト(Router)
上記の3機能に対して、どのように機能を割り振るかを決定します。
**上記3機能が持つ具体的な機能 [#v0f69474]
-ダイアログの管理
--トランザクション管理
-シーケンスの管理
--ルーティング情報
--ステート状態
-メッセージの変換
--ヘッダーの追加、削除
--ヘッダーの変更
-各ダイアログの連携
-制御モジュール並列化制御
-etc...
※他にも、機能がありそうなので、募集中。
*結論 [#t1f97055]
※ただいま、議論中。
**制御モジュールで持つべき機能 [#j758fb94]
-UAとして、必要な動作の管理
**制御モジュールコントロール [#ode2f5de]
-制御モジュール並列化制御
**スクリプトで持つべき機能 [#gc2e23f4]
-ヘッダーによる機能の振り分け(メソッドの振り分け?)