diff chapter4.tex @ 4:14e96778c600

update
author oc
date Mon, 16 Feb 2015 01:03:14 +0900
parents 63ae5aaa2a7a
children f6b14e3b72e0
line wrap: on
line diff
--- a/chapter4.tex	Sat Feb 14 14:25:36 2015 +0900
+++ b/chapter4.tex	Mon Feb 16 01:03:14 2015 +0900
@@ -23,6 +23,7 @@
 指定した幅・高さの画面サイズのみを配信することができる。
 起動方法をソースコード\ref{fixsize}に記述する。
 
+% あとでコメントアウトはずす
 \begin{lstlisting}[caption=オプション--fixSize,label=fixsize]
   $ java -jar TreeVNC.java -d --fixSize 1920 1080
 \end{lstlisting}
@@ -48,6 +49,7 @@
 そこで、一画面のみをフィルタリングし表示するためのオプション機能(${\mathchar`-}$${\mathchar`-}$filterSingleDisplay)を追加した。
 オプションを追加した起動方法をソースコード\ref{filtersingledisplay}に記述する。
 
+% あとでコメントアウトはずす
 \begin{lstlisting}[caption=オプション--filterSingleDisplay,label=filtersingledisplay]
   $ java -jar TreeVNC.java -d --filterSingleDisplay
 \end{lstlisting}
@@ -74,33 +76,136 @@
 
 さらに VNCServer から送信されてきた全画面データをそのまま node に流すのではなく、
 シングルディスプレイサイズの領域の更新部分のみを root 側でフィルタリングし流す。
+これにより、一画面のみの表示が可能となる。
 
-これにより、一画面のみの表示が可能となる。
+
+\section{Retina のマルチディスプレイ対応}
+Retina ディスプレイ等の高解像度ディスプレイには、
+より画素密度を高く表示する HiDPI (High-dot per inch) モードがある。
+HiDPI モードの場合、
+PC で設定する解像度に対して縦横2倍の画像データを表示している。
+TreeVNC でシングルディスプレイサイズを取得すると PC で設定する解像度のサイズになるが、
+VNCServer から送信される画像データサイズは解像度の2倍のサイズになる。
+
+マルチディスプレイ対応のためには、
+シングルディスプレイサイズを VNCServer から送信される画像データサイズに合わせなければならない。
+そこで、HiDPI モードであるかどうかを検知する必要がある。
+
+VNCServer は、接続されているディスプレイサイズを合わせて画像データを送信してくる。
+HiDPI モードであるかどうかを検知には、1枚目以降のディスプレイサイズが必要となる。
+
+以下に、HiDPI モードの取得方法を記述する。
+
+\begin{itemize}
+  \item VNCServer から送信される width は図\ref{fig:singledisplaywidth}の VNCServer Single width である
+  \item VncServer Single width から、図\ref{fig:singledisplaywidth}の 2nd Single width を引く
+  \item 余りのサイズが取得してきた図\ref{fig:singledisplaywidth} Single width の2倍であれば、HiDPI モードである
+\end{itemize}
+
+HiDPI モードの場合、originaiInitData を取得してきたシングルディスプレイの2倍サイズで生成する。
+この方法を用いて、HiDPI モードでもマルチディスプレイ対応ができた。
+
+\begin{figure}[htpd]
+  \begin{center}
+    \includegraphics[scale=0.6]{./images/chapter4/singleDisplayWidth.pdf}
+  \end{center}
+  \caption{Single Display Width}
+  \label{fig:singledisplaywidth}
+\end{figure}
 
 
 \newpage
 
 
-\section{Retina のマルチディスプレイ対応}
-
+\section{遠隔地からの接続}
+遠隔地からでもゼミや授業に参加できるよう、
+異なるネットワークインタフェースから TreeVNC への接続を可能にした。
 
-
-
-\section{遠隔地からの接続}
+遠隔地からの接続を実現した TreeVNC を図\ref{fig:remotetreevnc}に示す。
+図\ref{fig:remotetreevnc}では、
+ネットワーク A で立ち上げた TreeVNC に対し、
+遠隔地のネットワーク B, C, D から接続している状態である。
+図の様に、各ネットワーク毎に TreeManager を持つ root node が存在する。
+TreeManager を持つ node は、そのネットワーク上での接続の木構造を管理する root となる。
+遠隔地ネットワークから直接 TreeVNC に接続した node は root となる。
 
 \begin{figure}[htpd]
   \begin{center}
-    \includegraphics[scale=0.4]{./images/chapter4/remotenetwork.pdf}
+    \includegraphics[scale=0.6]{./images/chapter4/remoteTreeVnc.pdf}
+  \end{center}
+  \caption{Remote Network Tree}
+  \label{fig:remotetreevnc}
+\end{figure}
+
+\newpage
+
+以下に、遠隔地からの接続の手順を記述する。
+
+\begin{itemize}
+  \item 遠隔地 node から接続したい root に対して接続を要求する WHERE\_TO\_CONNECT message を送信する(図\ref{fig:remotevncconnect}中, 1:)
+  \item root は、遠隔地 node に対して接続先を含む CONNECT\_TO message を送信する(図\ref{fig:remotevncconnect}中, 2:)
+  \item 遠隔地 node は指定された接続先に対して接続しに行く(図\ref{fig:remotevncconnect}中, 3:)
+\end{itemize}
+
+\begin{figure}[htpd]
+  \begin{center}
+    \includegraphics[scale=0.7]{./images/chapter4/remoteVncConnect.pdf}
+  \end{center}
+  \caption{遠隔地 node からの接続}
+  \label{fig:remotevncconnect}
+\end{figure}
+
+ネットワーク毎に TreeVNC の木構造は管理される。
+図\ref{fig:remotenetworktree1}の TreeVNC の木構造はバイナリツリーを形成している。
+しかし、遠隔地 node が接続している node には合計3つ node が接続している。
+遠隔地 node は、root の管理する nodeList に追加されない。
+これは、node の接続・切断・切り替えに遠隔地 node を関与させないためである。
+
+ネットワーク毎に root が存在する。
+root は同じネットワーク上の新しい node からの
+接続を受け付ける(図\ref{fig:remotenetworktree1}中, 1,2,1',2':)。
+
+\newpage
+
+
+\begin{figure}[htpd]
+  \begin{center}
+    \includegraphics[scale=0.7]{./images/chapter4/remotenetwork.pdf}
   \end{center}
   \caption{Remote Network Tree}
   \label{fig:remotenetworktree1}
 \end{figure}
 
+
+遠隔地 node からでも、画面を配信できるようにする。
+遠隔地 node から画面配信を行う場合の画面の切り替えを図\ref{fig:remotenetworktree2}、図\ref{fig:remotenetworktree5}に示す。
+以下に、画面切り替えの説明を記述する。
+
+\begin{itemize}
+  \item 遠隔地 node が親 node へと SERVER\_CHANGE\_REQUEST を送信する(図\ref{fig:remotenetworktree2}中, 1:)
+  \item SERVER\_CHANGE\_REQUEST には、id が付いており、遠隔地 node からであれば -1 が付加されている
+  \item SERVER\_CHANGE\_REQUEST は root へと送信される(図\ref{fig:remotenetworktree2}中, 2:)
+  \item root は SERVER\_CHANGE\_REQUEST の id を確認し、id = -1 の場合、遠隔地 root に対して WHERE\_TO\_CONNECT を送信する(図\ref{fig:remotenetworktree2}中, 3:)
+  \item 遠隔地 root は WHERE\_TO\_CONNECT の返信として、接続先を含む CONNECT\_TO を送信する(図\ref{fig:remotenetworktree5}中, 4:)
+  \item root は指定された接続先へと接続しに行く(図\ref{fig:remotenetworktree5}中, 5:)
+\end{itemize}
+
+
+
+
+
 \begin{figure}[htpd]
   \begin{center}
-    \includegraphics[scale=0.4]{./images/chapter4/remotenetwork2.pdf}
+    \includegraphics[scale=0.7]{./images/chapter4/remotenetwork2.pdf}
   \end{center}
   \caption{Remote Network Tree}
   \label{fig:remotenetworktree2}
 \end{figure}
 
+\begin{figure}[htpd]
+  \begin{center}
+    \includegraphics[scale=0.7]{./images/chapter4/remotenetwork5.pdf}
+  \end{center}
+  \caption{Remote Network Tree}
+  \label{fig:remotenetworktree5}
+\end{figure}