# HG changeset patch # User riono # Date 1644661212 -32400 # Node ID 7142a147b9ab50c80d98c0aceccaec32f8824748 # Parent ea7e856b50e86d22a903d04ffdbfcb44fdad0ba9 fix diff -r ea7e856b50e8 -r 7142a147b9ab Paper/chapter/0-introduction.tex --- a/Paper/chapter/0-introduction.tex Thu Feb 10 19:47:17 2022 +0900 +++ b/Paper/chapter/0-introduction.tex Sat Feb 12 19:20:12 2022 +0900 @@ -2,7 +2,7 @@ オンラインゲームは様々な回線を通じて複数のプレイヤーが関与する分散プログラムである。 多くの場合通信形態はCloud上のServerを中心としたクライアントサーバ方式である。 分散プログラムを正しく書くことは、Debugなどを含め難しい。 -また、スマートフォンたタブレット端末の普及によりインターネット上で提供されているサービスやゲームに参加するユーザ数は増加傾向にある。 +また、スマートフォンやタブレット端末の普及によりインターネット上で提供されているサービスやゲームに参加するユーザ数は増加傾向にある。 増加するユーザに対応しつつ、正しく分散プログラムを書くことが求められている。 プログラマが1から分散プログラムを書くことは珍しくなっており、ほとんどの場合既存のフレームワークを利用して、分散システムの構築を行う。 @@ -17,7 +17,7 @@ DGMはnode内部にlocalなDGMが用意されており、自身のnodeのThread間での通信に用いられている。 他のnodeのDGMとしてproxyを持っており、対応したproxyにデータを書き込むことでnode間の通信を行っている。 -DGMの構成にはTopology Managerにより自動的に構成される。 +DGMはTopology Managerにより自動的に構成される。 nodeは初めにTopology Managerが動作しているhostと通信し、自分が接続すべきnodeが知らされる。 nodeは指示されたnodeに接続を行い、通信が行われる。 diff -r ea7e856b50e8 -r 7142a147b9ab Paper/chapter/1-Christie.tex --- a/Paper/chapter/1-Christie.tex Thu Feb 10 19:47:17 2022 +0900 +++ b/Paper/chapter/1-Christie.tex Sat Feb 12 19:20:12 2022 +0900 @@ -8,7 +8,7 @@ それらの問題点を解消するためにAliceを再設計し、作成されたものがChristieである。 -ChristieではAliceの機能や概念を維持しつつ、Aliceで発生していた問題点やプログラムを煩雑さなどを解消している。 +ChristieではAliceの機能や概念を維持しつつ、Aliceで発生していた問題点やプログラムの煩雑さなどを解消している。 \section{Christieの基礎概念} @@ -84,8 +84,8 @@ これにより簡易的な継続が行われているといえる。 また、keyでデータを渡すデータ構造にTreeMapを使用することがある。 -TreeMapはStackのような働きをするが、TreeMap自体を分散環境かで通信する場合に巨大なデータ構造を渡してしまうことになる。 -この方法では分散通信のパフォーマンスが低下してしまうと考えられるため、TreeMapのkey使用してPut/Takeすることで対応可能であると考える。 +TreeMapはStackのような働きをするが、TreeMap自体を分散環境で通信する場合に巨大なデータ構造を渡してしまうことになる。 +この方法では分散通信のパフォーマンスが低下してしまうと考えられるため、TreeMapのkeyを使用してPut/Takeすることで対応可能であると考える。 その際、2nd keyとして接続先のhostname:portを指定する。 こうするとで、データはproxyとしてアクセスすることが可能となる。 これよりChristieは、名前付き継続と呼ぶことが可能な継続の一つを使用していると言える。 @@ -150,7 +150,7 @@ CGに対してannotationから待ち合わせを実行する処理はsetupメソッドが行う。 -そのためソースコード\ref{src:StartCGExample}の6行目、ソースコード\ref{src:CGExample}の10行目のように、 +そのためソースコード\ref{src:StartCGExample}の10行目、ソースコード\ref{src:CGExample}の10行目のように、 CGのインスタンスをCGMのsetupメソッドに渡す必要がある。 そのためどこでもCGの待ち合わせを行うことができず、必ずCGMの生成を行う必要がある。 その制約により、複雑になりがちな分散プログラミングのコードの可読性を高めている。 @@ -244,7 +244,7 @@ 送信されたTakeコマンドを受け取ったLocalDGMは、要求されたDGがあればReplyコマンドを生成して送り返す。 もしDGがなければ、Remoteから来たコマンドもLocalの場合と同様にLocalDGMのwaitListに格納される。 -Replyコマンドを受け取るとRemoteDGMhはwaitListに入っていたコマンドを解決し、待ち合わせが完了する。 +Replyコマンドを受け取るとRemoteDGMはwaitListに入っていたコマンドを解決し、待ち合わせが完了する。 \section{Topology Manager} @@ -260,7 +260,7 @@ \begin{center} \includegraphics[width=120mm]{images/ring.pdf} \end{center} - \caption{ソースコード \ref{scr:ringdot}によるring状の接続} + \caption{ソースコード \ref{src:ringdot}によるring状の接続} \label{fig:ringdot} \end{figure} diff -r ea7e856b50e8 -r 7142a147b9ab Paper/chapter/2-RewriteCS.tex --- a/Paper/chapter/2-RewriteCS.tex Thu Feb 10 19:47:17 2022 +0900 +++ b/Paper/chapter/2-RewriteCS.tex Sat Feb 12 19:20:12 2022 +0900 @@ -101,7 +101,7 @@ ソースコード\ref{src:MirrorExample}はMirrorを使用して、プレイヤーを表示、操作する例である。 NetworkBehaviourはMonoBehaviorを継承して作成されており、ネットワーク上で動作させる処理に継承させる必要がある。 -OnStertServerメソッドはServerでこのGameObjectが生成された際に実行される。 +OnStartServerメソッドはServerでこのGameObjectが生成された際に実行される。 このような様々なcallbackがNetworkBehaviourには用意されている。 また、フィールド変数にSyncVar attributeを付与することで自動的に変数を同期可能にしている。 SyncVar attributeによってサポートされている型はC\#のプリミティブ型やstring、Unity APIから提供されているVector3やQuaternion、 @@ -216,7 +216,7 @@ \section{MessagePackの変更} Christieではデータを他Nodeに送信する際に、MessagePackを使用してデータをSerializeし、送信を行っている。 Christieで使用しているMessagePackはmsgpack java 0.6.12\cite{mspack}を使用しており、現在はサポートされていない。 -そのためJavaでサポート対象となっているmsgpack java 0.7.x以上のMEssagePakckとは記述方法が異なっている。 +そのため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} @@ -272,7 +272,7 @@ \section{Christie Sharpの記述方法} ソースコード\ref{src:CSStartCGExample}、\ref{src:CSCGExample}、\ref{src:CSCountExample}はソースコード\ref{src:StartCGExample}、\ref{src:CGExample}、\ref{src:CounteObj}をChristie Sharpで書き換えたものである。 JavaとC\#は大きく記述方法は変わらず、annotationがattributeになっている点が一番の違いである。 -そのためChristieとChristie Sharptには互換性があると言える。 +そのためChristieとChristie Sharpには互換性があると言える。 \lstinputlisting[label=src:CSStartCGExample, caption=Christie SharpにおけるStartCodeGearの記述例]{src/cs/StartCountUp.cs} \lstinputlisting[label=src:CSCGExample, caption=Christie SharpにおけるCodeGearの記述例]{src/cs/CountUpper.cs} diff -r ea7e856b50e8 -r 7142a147b9ab Paper/chapter/3-WorkingInUnity.tex --- a/Paper/chapter/3-WorkingInUnity.tex Thu Feb 10 19:47:17 2022 +0900 +++ b/Paper/chapter/3-WorkingInUnity.tex Sat Feb 12 19:20:12 2022 +0900 @@ -34,7 +34,7 @@ Christie SharpではStartCGにMainメソッドを記述してChristie Sharpを実行したが、Unityで動作させるためにはStartメソッドやUpdeteメソッドを使用す必要がある。 そのため、Christie Sharpの実行にStartCGを使用せずに実行できるよう変更を行った。 -\lstinputlisting[label=src:CountUpScript, caption=Unit上でのChristie Sharpの実行Script]{src/Unity/CountUpScript.cs} +\lstinputlisting[label=src:CountUpScript, caption=Unity上でのChristie Sharpの実行Script]{src/Unity/CountUpScript.cs} ソースコード\ref{src:CountUpScript}はソースコード\ref{src:CSStartCGExample}をUnityで動作するように書き換えたものであり、StartCGを使用せずに、Unity APIであるStartメソッドよりChristie Sharpを実行している。 StartCGは、CGMの初期化や処理の開始位置を明確化させるためのクラスであるため、Christie Sharpの実行に必須ではない。 @@ -48,7 +48,7 @@ % LateUpdateの話 % UniRXのDispatcherとUnity APIの仕様の話 -Christie Sharptの動作確認を行うため、以下の3点の確認を行った。 +Christie Sharpの動作確認を行うため、以下の3点の確認を行った。 LocalDGMに関してはソースコード\ref{src:CountUpScript}で正しく動作することを確認している。 \begin{itemize} @@ -67,7 +67,7 @@ UnityでChristie Sharpを使用する際に一つ問題が起きた。 Unity APIでサポートされている関数や型はMain Threadで動作時のみ処理が行われるという仕様がある。 -これはUnityの根本的な考え方であり、Unityでは基本的にシングルスレッドでの動作を想定してる。 +これはUnityの根本的な考え方であり、Unityでは基本的にシングルスレッドでの動作を想定している。 非同期処理を行うための機能として、CoroutineやInvoceなどの機能が提供されており、擬似的にMulti Threadのように処理を行うことが可能である。 しかしChristie SharpではCodeGearをTaskで処理させている。 このためCGに直接Transformを操作しても処理が実行されない。 @@ -118,7 +118,7 @@ 以上のテストにより、Christie Shrapの機能が問題なくUnity上でも機能することが確認できた。 \section{UnityでのChristie Sharpの役割} -UnityでCodeGearを動作させる場合、特にUnity APIを使用して処理を行う際は、MainThreadDispatcher.Postメソッドを利用してMain Threadに処理を以上する必要がある。 +UnityでCodeGearを動作させる場合、特にUnity APIを使用して処理を行う際は、MainThreadDispatcher.Postメソッドを利用してMain Threadに処理を移譲する必要がある。 他方、UnityではUpdateメソッドやFixedUpdateメソッドなどUnityの実装に従って、フレーム単位や時間単位でのメソッド呼び出しが保証されている。 CG内でMainThreadDispatcher.Postメソッドを使用しGameObjectの移動などのUnity APIを利用した処理を行うことで、処理が行われるタイミングが不安定になることがあると考えられる。 diff -r ea7e856b50e8 -r 7142a147b9ab Paper/chapter/4-LibraryComparison.tex --- a/Paper/chapter/4-LibraryComparison.tex Thu Feb 10 19:47:17 2022 +0900 +++ b/Paper/chapter/4-LibraryComparison.tex Sat Feb 12 19:20:12 2022 +0900 @@ -37,7 +37,7 @@ PUN2ではPhoton Cloudがあるが、無料での使用には制限がかかり、制限を超えると別途Serverの料金が発生する。 -Mirrorは自前でServerを用意する必要があり、処理の大半はServerで行われるためServerのスペックを考えて開発する必要があある。 +Mirrorは自前でServerを用意する必要があり、処理の大半はServerで行われるためServerのスペックを考えて開発する必要がある。 Christie SharpはUnity APIへの対応が未対応が目立つ一方、p2pで通信を行うため、強力なServerを必要としない。 またp2pの形式を取っているが、Topology ManagerのHostをServerで作動させることで、クライアントサーバ方式に変更することも可能である。 diff -r ea7e856b50e8 -r 7142a147b9ab Paper/chapter/conclusion.tex --- a/Paper/chapter/conclusion.tex Thu Feb 10 19:47:17 2022 +0900 +++ b/Paper/chapter/conclusion.tex Sat Feb 12 19:20:12 2022 +0900 @@ -2,7 +2,7 @@ 本研究では、Christieの概要について説明を行い、Unityで使用可能な通信ライブラリの特徴を挙げた上で、ChristieをC\#に書き換える意義について述べた。 C\#での再実装時に発生した問題である、attributeの実装、CodeGearの処理をThreadからTaskへの変更、MessagePackのバージョン変更、 MessagePackを使用する際の送信パケットの変更について述べた。 -また、ChristieとChristie Shrpの記述方法の違いと、UnityでChristie Sharpを動作させた際の記述について説明した。 +また、ChristieとChristie Sharpの記述方法の違いと、UnityでChristie Sharpを動作させた際の記述について説明した。 他の通信ライブラリとの比較では、PUN2とMirrorとの比較を行い、Christie SharpはUnity APIは未対応であるが、OSSにする予定のため拡張や改良が可能である。 また、p2pで通信を行うため強力なServerを使用する必要はなく、Topology ManagerのHostをServerで動作させることで、クライアントサーバ方式に変更が可能である。 diff -r ea7e856b50e8 -r 7142a147b9ab Paper/master_paper.pdf Binary file Paper/master_paper.pdf has changed