diff chapter3.tex @ 6:1bc81f8b7517

update chapter3
author oc
date Mon, 16 Feb 2015 17:20:04 +0900
parents 14e96778c600
children f6b14e3b72e0
line wrap: on
line diff
--- a/chapter3.tex	Mon Feb 16 01:03:50 2015 +0900
+++ b/chapter3.tex	Mon Feb 16 17:20:04 2015 +0900
@@ -12,11 +12,10 @@
 最低限のソケットポートを開けることによって、
 メモリの使用量を抑えることにも繋がる。
 
-以下に、動的に port 番号を割り当てているソースコードを記述する。
+以下に、動的に port 番号を割り当てているソースコード\ref{selectport}を記述する。
 
-% selectPort する箇所を記述する
 
-\begin{lstlisting}[caption=オプション--fixSize,label=fixsize]
+\begin{lstlisting}[caption=動的な port 番号の割り当て,label=selectport]
     public int selectPort(int p) {
         int port = p;
         while (true) {
@@ -40,13 +39,24 @@
     }
 \end{lstlisting}
 
+\newpage
 
-%  messageの説明にportにどんな関係があるのかとから
+
+selectPort メソッドは、TreeVNC を立ち上げた際に呼ばれる。
+ソースコード\ref{selectport}の try 節で ServerSocket を生成する。
+ServerSocket 生成の際に port 番号を結びつける。
+この時に既に port 番号が使用されている場合、
+BindException error が起こる。
+その場合、catch 節に処理が移行する。
+port をインクリメントし、
+continue でもう一度 ServerSocket を生成しに行く。
+成功するまで port はインクリメントされるので、
+ユニークな port 番号を使用することが可能となる。
+
 以前は固定port番号を使用しmessageの通信を行っていたが、
 一意なportを割り当てられているnodeが通信を行うことによって、
 どのport番号が使用されているかを意識する必要がなくなった。
 
-\newpage
 
 \section{QUALITYモードとSPEEDモード}
 
@@ -85,22 +95,45 @@
 図\ref{fig:multinetworktree}の様に、ネットワークインターフェース別に
 木構造を形成するように設計した。
 
-TreeVNCは、rootがnodeListというリストを保持し、木構造を管理している。
-複数のネットワークインターフェースで木構造を形成する場合、
-このnodeListをネットワークインターフェース毎に作成しておく。
-新しいnodeを接続する際、nodeのネットワークインターフェースを取得し、
-どのnodeListに登録されるかが決まる。
-こうすることによって、TreeVNCを複数のネットワークインターフェイス別に
-木構造を構成することができる。
-
 \begin{figure}[htpd]
   \begin{center}
-    \includegraphics[scale=0.4]{./images/chapter3/MultiNetworkTree.pdf}
+    \includegraphics[scale=0.6]{./images/chapter3/MultiNetworkTree.pdf}
   \end{center}
   \caption{Multi Network Tree}
   \label{fig:multinetworktree}
 \end{figure}
 
+TreeVNC は、root が TreeManager というオブジェクトを持っている。
+TreeManager は TreeVNC の接続部分を管理している。
+TreeManager では木構造を管理する nodeList が生成される。
+この nodeList を元に、新しい node の接続や、node の切断検出時の接続の切り替え等を行う。
+
+今回 TreeManager を、 root の保持しているネットワークインタフェース毎に
+生成する様に変更した。
+ソースコード\ref{createtreemanager}に、nodeList を生成する部分を示す。
+
+\newpage
+
+\lstinputlisting[breaklines=true,caption=TreeManager の生成,label=createtreemanager]{source/GetNetworkInterfaces.java}
+
+\begin{itemize}
+  \item for 文を使用し root が所持しているネットワークインタフェースを取得する(\ref{createtreemanager}中, 2行目)
+  \item その中から、起動しており Multicast に対応しており、また、ループバックインタフェースでないネットワークインタフェースを取得する(\ref{createtreemanager}中, 4行目)
+  \item 取得してきたネットワークインタフェースの、ネットマスク、ホストネームを取得する(\ref{createtreemanager}中, 6,7行目)
+  \item TreeManager を生成する(\ref{createtreemanager}中, 8行目)
+  \item TreeManager にネットマスクとネットアドレスを追加する(\ref{createtreemanager}中, 14行目)
+  \item HashMap である interfaces に ネットワークインタフェースと対応する TreeManager を追加する(\ref{createtreemanager}中, 15行目)
+\end{itemize}
+
+新しい node が接続してきた際、
+interfaces から node のネットワークインタフェースと一致する TreeManager を取得する。
+その TreeManager に、node 接続の処理を任せる。
+
+こうすることによって、TreeVNC を複数のネットワークインターフェース別に
+木構造を構成することができる。
+
+
+
 
 \newpage