Mercurial > hg > Papers > 2021 > riono-sigos
comparison Paper/riono-sigos.tex @ 15:2dd23f9603b3
update chapter Christie example
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 04 May 2021 23:41:09 +0900 |
parents | 73a3c53c7568 |
children | c65256380a80 |
comparison
equal
deleted
inserted
replaced
14:73a3c53c7568 | 15:2dd23f9603b3 |
---|---|
92 \maketitle | 92 \maketitle |
93 | 93 |
94 | 94 |
95 \section{オンラインゲームにおけるデータ通信} | 95 \section{オンラインゲームにおけるデータ通信} |
96 | 96 |
97 | |
98 | |
99 \section{Chrisite のC\#への書き換えについて} | |
100 Chrisite はAlice というプロジェクトで開発が行われていた。しかしAlice には様々な問題点があった。 | |
101 | |
102 | |
103 | |
104 | |
105 | |
97 \section{Christieの基礎概念} | 106 \section{Christieの基礎概念} |
98 Chrisiteは当研究室で開発している分散通信フレームワークである。同じく当研究室で開発している GearsOSのファイルシステムに組み込まれる予定があるため、GearsOSを構成する言語 Continuation based Cと似た概念を持っている。 Chrisiteに存在する概念として以下のようなものがある。 | 107 Chrisiteは当研究室で開発している分散通信フレームワークである。同じく当研究室で開発している GearsOSのファイルシステムに組み込まれる予定があるため、GearsOSを構成する言語 Continuation based Cと似た概念を持っている。 Chrisiteに存在する概念として以下のようなものがある。 |
99 | 108 |
100 \begin{itemize} %箇条書き | 109 \begin{itemize} %箇条書き |
101 \item CodeGear | 110 \item CodeGear |
119 \item[TakeFrom (Remote DGM name)] Take と似ているが、Remote DGM nameを指定することで、その接続先(Remote) のDataGearManager からTake 操作を行える。 | 128 \item[TakeFrom (Remote DGM name)] Take と似ているが、Remote DGM nameを指定することで、その接続先(Remote) のDataGearManager からTake 操作を行える。 |
120 \item[PeekFrom (Remote DGM name)] Peek と似ているが、Remote DGM name を指定することで、その接続先(Remote) のDataGearManager からPeek 操作を行える。 | 129 \item[PeekFrom (Remote DGM name)] Peek と似ているが、Remote DGM name を指定することで、その接続先(Remote) のDataGearManager からPeek 操作を行える。 |
121 \end{description} | 130 \end{description} |
122 | 131 |
123 \section{プログラムの例} | 132 \section{プログラムの例} |
124 Code \ref{code:javaSHW} はChrisite の機能を使用してhello world を出力する例題である。 | 133 Code \ref{code:javaSHW} 、Code \ref{code:javaHWC} 、Code \ref{code:javaFHW} はChrisite の機能を使用してhello world を出力する例題である。 |
125 CodeGearManager を作り、setup(new CodeGear) を行うことで各CodeGear に記述されたDataGear の待ち合わせを行う。全てのDataGear が揃った場合にCodeGear が実行される。CodeGearaManager の作成方法はStartCodeGear を継承したものから、createCGM(port) を実行することにより、CodeGearManager が作成できる。 | |
126 | |
127 | 134 |
128 \lstinputlisting[caption=StartHelloWorld, label=code:javaSHW]{src/StartHelloWorld.java} | 135 \lstinputlisting[caption=StartHelloWorld, label=code:javaSHW]{src/StartHelloWorld.java} |
129 | 136 \lstinputlisting[caption=HelloWorldCodeGear, label=code:javaHWC]{src/HelloWorldCodeGear.java} |
130 | 137 \lstinputlisting[caption=FinishHelloWorld, label=code:javaFHW]{src/FinishHelloWorld.java} |
131 | 138 |
132 \section{歴史について} | 139 Code \ref{code:javaSHW} ではCodeGearManager を作り、setup(new CodeGear) を行うことで各CodeGear に記述されたDataGear の待ち合わせを行う。全てのDataGear が揃った場合にCodeGear が実行される。CodeGearaManager の作成方法はStartCodeGear を継承したものから、createCGM(port) を実行することにより、CodeGearManager が作成できる。 |
133 | 140 |
141 Code \ref{code:javaSHW} の11、12行目はput(key, data) を行うことでDataGearManager のqueue にデータを格納することができる。key はstring 型のみで格納したい変数名を指定する。11、12行目のput ではCode \ref{code:javaHWC} のフィールド変数helloWorld を指定し、データは"hello" と"world" を逐次的に格納している。 | |
142 | |
143 Code \ref{code:javaHWC} 、Code \ref{code:javaFHW} がCodeGearにあたる。それぞれのフィールド変数には@Take annotation が付いており、DataGearManager に格納されたkey を参照してデータを取得する。その後DataGearManger に格納されたデータは破棄される。 | |
144 | |
145 Code \ref{code:javaHWC} では最初にフィールド変数 helloWorld にstring 型の"hellow"を取得、print を行い、再びkey hello、data "hello" をDataGearManager にput している。また8行目で自らをsetpuしているため、再帰的にHelloWorldCodeGear が再実行される。2回目の実行ではフィールド変数 helloWorld に"world" が格納と出力がされ、key world、data "world" がDataGearManager に格納される。Code \ref{code:javaHWC} でput した"hello" と"world" は最終的に、Code \ref{code:javaFHW} の同名のフィールド変数に格納される。 | |
146 2回目の実行でもsetup しているが、DataGearManagerにはkey helloWorld のデータが無いため、3回目以降は実行されない。 | |
147 | |
148 Code \ref{code:javaHWC} の2回の実行後、Code \ref{code:javaHWC} のローカル変数hello とworld が全て揃ったことによりCode \ref{code:javaHWC} が実行されプログラムは終了する。 | |
134 | 149 |
135 | 150 |
136 \section{Unity} | 151 \section{Unity} |
152 | |
153 | |
154 | |
155 \section{C\# でのChristie} | |
156 | |
157 Code \ref{code:javaSHW} 、Code \ref{code:javaHWC} 、Code \ref{code:javaFHW} がC\#ではこうなります | |
158 | |
159 \lstinputlisting[caption=C\# StartHelloWorld, label=code:csSHW]{src/StartHelloWorld.cs} | |
160 | |
161 | |
162 | |
163 \section{Unityでの動作} | |
164 | |
165 | |
166 | |
137 | 167 |
138 \section{annotation の書き換え} | 168 \section{annotation の書き換え} |
139 java 版ではDataGear を取得する際に、annotation という java の機能を用いて行った。C\#には annotation はなく、代わりにattribute を利用して DataGear の取得を行っている。 | 169 java 版ではDataGear を取得する際に、annotation という java の機能を用いて行った。C\#には annotation はなく、代わりにattribute を利用して DataGear の取得を行っている。 |
140 以下のCode \ref{code:javaTake}、Code \ref{code:csTake}はjava とC\# におけるTakeの実装である。 | 170 以下のCode \ref{code:javaTake}、Code \ref{code:csTake}はjava とC\# におけるTakeの実装である。 |
141 | 171 |
170 | 200 |
171 \section{CodeGear 実行時のThreadPool からTask への変更} | 201 \section{CodeGear 実行時のThreadPool からTask への変更} |
172 java では別Thread を | 202 java では別Thread を |
173 | 203 |
174 | 204 |
175 \section{C\#への書き換え後のプログラムの例} | |
176 | |
177 \lstinputlisting[caption=C\# StartHelloWorld, label=code:csSHW]{src/StartHelloWorld.cs} | |
178 | |
179 | |
180 \section{Unityでの動作} | |
181 | |
182 | 205 |
183 \section{チート対策について} | 206 \section{チート対策について} |
184 | 207 |
185 \section{実装の現状} | 208 \section{実装の現状} |
186 | 209 |