annotate Paper/chapter/2-RewriteCS.tex @ 27:cdf988e1ccf2

update chapter 2
author riono <e165729@ie.u-ryukyu.ac.jp>
date Wed, 02 Feb 2022 20:33:30 +0900
parents 905ebcf50755
children 2a9f335e45bd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
1 \chapter{ChristieのC\#への書き換え}
18
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
2
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
3 \section{Unity}
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
4 UnityはUnity Technologiesが開発、公開しているゲームエンジンである。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
5 画像や3Dモデルの表示、物理演算、UIのイベント機能などゲーム制作に必要な機能が標準で備わっており、
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
6 個人でもゲーム開発が可能となっている。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
7 さまざまなプラットフォームに対応可能であり、PC、iOS、Androidやその他コンシューマ機器も開発可能である。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
8 また、非常に動作が軽いことも特徴であり、スペックが低いノートPCでも十分ゲーム開発が可能である。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
9
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
10 プログラミング言語としてはC\#がサポートされている。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
11 最新バージョンである2021.2.8ではC\# 9がサポートされており、
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
12 .NET Frameworkはバージョン4.6に対応している。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
13 C\#向けの既存のAPIや外部ライブラリ、Unity用に開発されたAPIなども使用可能である。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
14 拡張性が高く、開発に必要な機能を作成しUnityのメニューから実行することも可能である。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
15
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
16
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
17 本研究では、開発環境を整えるためのハードルの低さ、公開されている通信ライブラリの豊富さなどを考慮しUnityを採用した。
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
18 Unity上でChristieを動作させるために、Javaで記述されているChristieをC\#に書き換えを行う。
18
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
19
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
20 \section{Christie Sharpの書き換えの基本方針}
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
21 Javaで記述されたChristieと区別するため、C\#で記述するChristieをChrisite Sharpとする。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
22 Chrisite Sharpではコードの保守性や、Christie設計時の意図などを守るため、Chrisiteと同じ挙動、同じ動作をする必要がある。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
23 初めにC\#単体で動作するように、Christieの核となる部分の書き換えを行った。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
24
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
25
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
26 ChristieはJava 9から開発されていたため、現在では非推奨なコードやバージョンアップが必要な箇所が存在する。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
27 そこで書き換えを行う際に、C\#に対応しつつ処理動作の向上や最適化を行うために以下の改良を行った。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
28
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
29 \begin{itemize}
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
30 \item MessagePackの変更及びバージョンアップ
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
31 \item ThreadPoolからTaskへの変更
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
32 \end{itemize}
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
33
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
34
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
35 \section{attributeの実装}
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
36 ChristieではDGを取得する際に、annotationを用いてTakeやPeekなどのコマンドを処理していた。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
37 Christie Sharpはannotationではなく、代わりにattributeを利用してコマンドの処理を行っている。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
38
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
39 \lstinputlisting[label=src:JavaTakeImple, caption=JavaにおけるTake annotationの実装]{src/java/Take.java}
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
40 \lstinputlisting[label=src:CSTakeImple, caption=C\#におけるTake attributeの実装]{src/cs/Take.cs}
18
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
41
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
42 ソースコード\ref{src:JavaTakeImple}はJavaにおけるTake annotationの実装である。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
43 Javaでannotationを自作する際には、\@interfaceで宣言を行う。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
44 1行目ではannotationの適用可能箇所を指定しておりフィールド変数に対して付与可能としている。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
45 また、2行目はannotationの情報をどの段階まで保持するかを指定しており、Takeの場合JVMによって保存され、ランタイム環境で使用可能となっている。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
46
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
47 ソースコード\ref{src:CSTakeImple}はC\#におけるTake attributeの実装である。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
48 C\#でattributeを自作する際には、System.Attributeを継承する必要がある。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
49 attributeの適用可能箇所については、1行目にてフィールド変数を指定している。
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
50
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
51
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
52 attributeの使用方法はannotationと同じく変数の宣言の前に、[ ]内に使用するattributeを宣言する(ソースコード\ref{src:CSTakeExample})。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
53
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
54 \lstinputlisting[label=src:CSTakeExample, caption=Take attributeの例]{src/cs/TakeExample.cs}
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
55
18
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
56
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
57
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
58 \section{TaskによるCodeGearの処理}
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
59 ChrisiteではCGの実行にThreadPoolを利用していた。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
60 しかしThreadPoolは管理や生成が煩雑であり、コストパフォーマンスの低下につながりやすい。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
61 C\#にはThreadをより使いやすく高機能にしたTaskという機能がある。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
62 TaskはC\#のThreadPoolを拡張しており、内部にThreadPoolと実行待ちQueueを持っている。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
63 Task.RunメソッドやTask.Factory.StartNewメソッドで処理を実行でき、処理が渡されるとThreadPoolで処理されるため、Christieと同じ動作をすると考え、Christie SharpではTaskで書き換えを行った。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
64
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
65 \lstinputlisting[label=src:JavaThreadPoolExecutor, caption=ChristieにおけるThreadPoolの実装の一部]{src/java/ThreadPoolExecutor.java}
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
66
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
67 ソースコード\ref{src:JavaThreadPoolExecutor}はChristieにおけるCodeGearを処理するThreadPoolの実装の一部である。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
68 Javaでは独自にThreadPoolを実装する際にはThreadPoolExecutorを継承する。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
69 またThreadの優先度を変更する機能が実装されており、CodeGear実行時に処理の優先度を設定することが可能となっている。
18
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
70
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
71 \newpage
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
72
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
73 \lstinputlisting[label=src:CSThreadPoolExecutor, caption=Christie SharpにおけるThreadPoolの実装]{src/cs/ThreadPoolExecutor.cs}
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
74
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
75 ソースコード\ref{src:CSThreadPoolExecutor}はソースコード\ref{src:JavaThreadPoolExecutor}をC\#に書き換えを行ったものである。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
76 CGの実行には14行目のExecuteを呼び出し、Taskで実行を行っている。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
77
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
78
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
79 Threadの優先度による実行順変更については、実装の優先度が低かったため今回は実装を行っていない。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
80 Taskのスケジューラーは自作可能であり、実行待ちQueueの処理順を変更することができるため実装可能である。
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
81
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
82
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
83 \section{Socket通信用のThreadをTaskに変更}
27
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
84 Christieでは、Socket通信を行っている箇所もThreadを使用したMultiThreadで動作している。
21
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
85 こちらも可読性や保守性のためTaskへの書き換えを行った。
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
86
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
87 \lstinputlisting[label=src:JavaAcceptThread, caption=ChristieにおけるAcceptThreadの実装の一部]{src/java/AcceptThread.java}
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
88
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
89 ソースコード\ref{src:JavaAcceptThread}はChristieにおけるSocket通信を行っているThreadの実行箇所である。
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
90 無限ループを行い、他nodeがSocketで接続される度にデータ送受信専用のThreadを作成する。
27
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
91 IncomingTCPConnectionではデータの受け取りを行っており、OutboundTCPConnectionではSocket通信が終了する際のコマンドの送信をそれぞれMultiThreadで行っている。
21
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
92
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
93 \lstinputlisting[label=src:CSAcceptThread, caption=Christie SharpにおけるAcceptThreadの実装の一部]{src/cs/AcceptThread.cs}
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
94
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
95 ソースコード\ref{src:CSAcceptThread}はソースコード\ref{src:JavaAcceptThread}をC\#に書き換えを行ったものである。
27
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
96 Christieでは、MultiThreadでSocket通信を行っていた。
23
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
97 Christie SharpではCodeGearの処理で使用していたThreadPoolと同様にTaskへの書き換えを行った。
18
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
98
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
99 \section{MessagePackの変更}
25
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
100 Christieではデータを他Nodeに送信する際に、MessagePackを使用してデータをSerializeし、送信を行っている。
23
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
101 Chrisiteで使用しているMessagePackはmsgpack java 0.6.12を使用しており、現在はサポートされていない。
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
102 そのためJavaでサポート対象となっているmsgpack java 0.7.x以上のMEssagePakckとは記述方法が異なっている。
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
103 ソースコード\ref{src:JavaMspackExample}はChristieで使用してるmsgpack java 0.6.12の使用例である。
18
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
104
23
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
105 \lstinputlisting[label=src:JavaMspackExample, caption=JavaにおけるMessagePackの使用例]{src/java/MessagePackExample.java}
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
106
25
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
107 MessagePackを使用するには、Serializeを行うクラスに対して明示的に@Message annotationを付ける必要がある。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
108 これにより、クラス内で宣言したpublic変数がエンコードの対象となる。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
109 ソースコード\ref{src:JavaMspackExample}の14 - 18行目はSerialize/Deserializeを行う例である。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
110 MessagePackインスタンスを作成後、writeメソッドを使用することで引数に渡したオブジェクトをbyte[]型にSerializeできる。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
111 Deserializeにはreadメソッドを使用し、引数としてSerializeされたbyte[]型とDeserialize対象のクラスを渡すことでデコードできる。
23
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
112
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
113
25
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
114 C\#のMessagePackは複数存在しており、msgpack java 0.6.12とほぼ同様の記述方法を採っているMessagePack CSharp 2.3.85を選択した。
23
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
115
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
116 \newpage
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
117
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
118 \lstinputlisting[label=src:CSMspackExample, caption=C\#におけるMessagePackの使用例]{src/cs/MessagePackExample.cs}
25
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
119 MessagePack CSharpではmsgpack javaと同様にクラスに対してSerializeを行うため、\ref{src:CSMspackExample}の1行目でMessageObject attributeを追加している。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
120 また、Serializeする変数に対してkeyを設定することができ、indexesとしてのintやstringをkeyとして指定することができる。
23
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
121
25
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
122 データのSerializeにはMessagePackSerializer.Serializeメソッドを使用し、引数として渡したオブジェクトをbyte[]型にSerializeする。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
123 DeserializeにはMessagePackSerializer.Deserializeメソッドを使用する。Deserializeメソッドはジェネリスク関数であるため、<>内にDeserialize対象のクラスを指定する。
23
06daf5e1e9de update Rewriting chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
124 ソースコード\ref{src:CSMspackExample}の22行目ではjson展開の例であり、変数それぞれにkeyを指定していることで展開可能となっている。
18
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
125
25
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
126 \section{送信パケットの修正}
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
127 MessagePackのバージョンを更新した影響により、Remote nodeにデータを送信するパケットの形式を変更する必要がある。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
128 図\ref{fig:SendPackt}はChristieと、Chrisite Sharpにおける送信パケットの構成である。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
129 msgpack javaではreadメソッドの引数にClass$<$T$>$を渡すことでデコード可能であり、RemoteMessageのDeserializeにデータ長を指定する必要はない。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
130 DGはジェネリスクで記述しており毎回デコードするクラスが異なるため、デコードの際にデータ長を必要としている。
18
54229d70b7b3 updatae
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
131
21
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
132
25
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
133 しかしMessagePack CSharpでは、DeserializeメソッドにClass$<$T$>$を渡してデコードすることができないため、データ長も付属させてデータを送信する。
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
134 それぞれのSizeのデータ長はintで指定しているが、MessagePackでSerializeした際に最大で5byteになる。
21
866f4329e430 title fix and add Continuation section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
135
25
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
136 \begin{figure}[htb]
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
137 \begin{center}
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
138 \includegraphics[width=150mm]{images/SendPackt.pdf}
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
139 \end{center}
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
140 \caption{送信パケットの構成}
3bf32fc6dab1 add images
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
141 \label{fig:SendPackt}
26
905ebcf50755 fix filename
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
142 \end{figure}
905ebcf50755 fix filename
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
143
905ebcf50755 fix filename
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
144
905ebcf50755 fix filename
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
145
905ebcf50755 fix filename
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
146 \section{Chrisite SharpのDebug}
27
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
147 Christie Sharpの開発にはJetBrainsが開発・提供しているC\#向けのIDE、Riderを用いている。
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
148 Christie Sharpは並列分散プログラミングを行っているため、MultiThreadでのDebugが必須である。
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
149 RiderにはDebugerの標準的な機能が搭載されているが、Christie Shapを開発する際、MainThread以外で処理をする箇所に対して張ったBreak point
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
150 でプロセスが停止しない状況に陥った。
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
151 解決方法がないか調査を行ったが原因は不明であり、MainThreadにBreak pointを張った場合には正しく停止するのに対し、
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
152 MultiThreadにBreak pointを張った際には停止できないと言うことがわかった。
cdf988e1ccf2 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
153 そのため非効率ではあるが、Debugを行いたい処理の箇所にPrint文を挟むことでDebugを行った。
26
905ebcf50755 fix filename
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
154