diff Paper/chapter/2-RewriteCS.tex @ 25:3bf32fc6dab1

add images
author riono <e165729@ie.u-ryukyu.ac.jp>
date Wed, 02 Feb 2022 18:10:34 +0900
parents 06daf5e1e9de
children 905ebcf50755
line wrap: on
line diff
--- a/Paper/chapter/2-RewriteCS.tex	Wed Feb 02 10:14:18 2022 +0900
+++ b/Paper/chapter/2-RewriteCS.tex	Wed Feb 02 18:10:34 2022 +0900
@@ -97,33 +97,46 @@
 Christie SharpではCodeGearの処理で使用していたThreadPoolと同様にTaskへの書き換えを行った。
 
 \section{MessagePackの変更}
-Christieではデータを他Nodeに送信する際に、MessagePackを使用してデータを圧縮し、送信を行っている。
+Christieではデータを他Nodeに送信する際に、MessagePackを使用してデータをSerializeし、送信を行っている。
 Chrisiteで使用しているMessagePackはmsgpack java 0.6.12を使用しており、現在はサポートされていない。
 そのためJavaでサポート対象となっているmsgpack java 0.7.x以上のMEssagePakckとは記述方法が異なっている。
 ソースコード\ref{src:JavaMspackExample}はChristieで使用してるmsgpack java 0.6.12の使用例である。
 
 \lstinputlisting[label=src:JavaMspackExample, caption=JavaにおけるMessagePackの使用例]{src/java/MessagePackExample.java}
 
-MessagePackを使用するには、圧縮を行うクラスに対して明示的に@Message annotationを付ける必要がある。
-これにより、クラス内で宣言したpublic変数が圧縮の対象となる。
-ソースコード\ref{src:JavaMspackExample}の14 - 18行目は圧縮解凍を行う例である。
-MessagePackインスタンスを作成後、writeメソッドを使用することで引数に渡したオブジェクトをbyte[]型に圧縮できる。
-解凍にはreadメソッドを使用し、引数として圧縮されたbyte[]型と解凍対象のクラスを渡すことで解凍できる。
+MessagePackを使用するには、Serializeを行うクラスに対して明示的に@Message annotationを付ける必要がある。
+これにより、クラス内で宣言したpublic変数がエンコードの対象となる。
+ソースコード\ref{src:JavaMspackExample}の14 - 18行目はSerialize/Deserializeを行う例である。
+MessagePackインスタンスを作成後、writeメソッドを使用することで引数に渡したオブジェクトをbyte[]型にSerializeできる。
+Deserializeにはreadメソッドを使用し、引数としてSerializeされたbyte[]型とDeserialize対象のクラスを渡すことでデコードできる。
  
 
-C\#のMessagePackは複数存在しており、msgpack java 0.6.12とほぼ同様の記述方法を採っているMessagePack CSharpを選択した。
+C\#のMessagePackは複数存在しており、msgpack java 0.6.12とほぼ同様の記述方法を採っているMessagePack CSharp 2.3.85を選択した。
 
 \newpage
 
 \lstinputlisting[label=src:CSMspackExample, caption=C\#におけるMessagePackの使用例]{src/cs/MessagePackExample.cs}
-MessagePack CSharpではmsgpack javaと同様にクラスに対して圧縮を行うため、\ref{src:CSMspackExample}の1行目でMessageObject attributeを追加している。
-また、圧縮する変数に対してkeyを設定することができ、indexesとしてのintやstringをkeyとして指定することができる。
+MessagePack CSharpではmsgpack javaと同様にクラスに対してSerializeを行うため、\ref{src:CSMspackExample}の1行目でMessageObject attributeを追加している。
+また、Serializeする変数に対してkeyを設定することができ、indexesとしてのintやstringをkeyとして指定することができる。
 
-データの圧縮にはMessagePackSerializer.Serializeメソッドを使用し、引数として渡したオブジェクトをbyte[]型に圧縮変換する。
-解凍にはMessagePackSerializer.Deserializeメソッドを使用する。Deserializeメソッドはジェネリスク関数であるため、<>内に解凍対象のクラスを指定する。
+データのSerializeにはMessagePackSerializer.Serializeメソッドを使用し、引数として渡したオブジェクトをbyte[]型にSerializeする。
+DeserializeにはMessagePackSerializer.Deserializeメソッドを使用する。Deserializeメソッドはジェネリスク関数であるため、<>内にDeserialize対象のクラスを指定する。
 ソースコード\ref{src:CSMspackExample}の22行目ではjson展開の例であり、変数それぞれにkeyを指定していることで展開可能となっている。
 
-\section{送信データの修正}
+\section{送信パケットの修正}
+MessagePackのバージョンを更新した影響により、Remote nodeにデータを送信するパケットの形式を変更する必要がある。
+図\ref{fig:SendPackt}はChristieと、Chrisite Sharpにおける送信パケットの構成である。
+msgpack javaではreadメソッドの引数にClass$<$T$>$を渡すことでデコード可能であり、RemoteMessageのDeserializeにデータ長を指定する必要はない。
+DGはジェネリスクで記述しており毎回デコードするクラスが異なるため、デコードの際にデータ長を必要としている。
 
 
+しかしMessagePack CSharpでは、DeserializeメソッドにClass$<$T$>$を渡してデコードすることができないため、データ長も付属させてデータを送信する。
+それぞれのSizeのデータ長はintで指定しているが、MessagePackでSerializeした際に最大で5byteになる。
 
+\begin{figure}[htb]
+  \begin{center}
+    \includegraphics[width=150mm]{images/SendPackt.pdf}
+  \end{center}
+  \caption{送信パケットの構成}
+  \label{fig:SendPackt}
+\end{figure}
\ No newline at end of file