[[開発/設計/議論]]


*議論の目的 [#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]
-ヘッダーによる機能の振り分け(メソッドの振り分け?)