annotate user/riono210/sigos2021.md @ 96:d3c9934a0b4b

backup 2021-10-14
author autobackup
date Thu, 14 Oct 2021 00:10:04 +0900
parents 912d10e02a20
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
1 ## 継続を使用する並列分散フレームワークのUnity実装
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
2
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
3 ---
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
4
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
5 author: Ryo Yasuda, Shinji Kono
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
6 profile: 琉球大学理工学研究科情報工学専攻 河野研究室
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
7
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
8 ### 概要
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
9 * オンラインゲームにおける通信にはクライアントサーバ方式が主流
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
10 * データの共有はサーバを経由するため低速
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
11 * 当研究室で開発を行っているChristie の分散計算を使用することで、高速かつ安全に通信できると考えた
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
12 * Christie をUnity で使用するためにC# で書き換えを行った
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
13 * 実装としては、localDataGearManager を用いた同一プロセスで複数インスタンス立ち上げによる通信が可能
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
14
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
15 ---
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
16
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
17 ### オンラインゲームにおけるデータ通信
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
18 * オンラインゲームは複数のプレイヤーが関与する分散プログラム
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
19 * 分散プログラムを正しく書くことは難しい
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
20 * 攻撃の標的になる場合が多い
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
21 * クライアントの負荷軽減やチート対策のため、クライアントサーバ方式が主流
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
22 * データの同期にはサーバを経由するため低速
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
23
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
24 ---
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
25
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
26 ### オンラインゲームにおけるデータ通信
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
27 * 当研究室では並列分散通信フレームワークChristie を開発中である
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
28 * 型のあるDataGear とKey を持つストリーム、DataGearManager として格納している
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
29 * 他のノードはDGM のproxyを持っており、proxy に書き込むことで通信を実現している
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
30 * DGM はトポロジーマネージャーによって自動的に構築される
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
31 * プログラム自体はDGM の名前を知っていれば良い
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
32 * 他のノードのIP addressなどを知る必要はない
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
33
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
34 * ネットワークが切断されてもゲームは継続可能
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
35 * ノードが接続している対象を直接知ることはできない
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
36 * チートに対する耐性がある
63
f440c8f6f66f backup 2021-05-22
autobackup
parents: 62
diff changeset
37
f440c8f6f66f backup 2021-05-22
autobackup
parents: 62
diff changeset
38
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
39 * 本研究ではJava で書かれたChristieとC# で書き換えを行ったChristie #を説明し、その機能と実装の差について考察を行う
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
40
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
41 ---
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
42
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
43 ### Christie の基礎概念
63
f440c8f6f66f backup 2021-05-22
autobackup
parents: 62
diff changeset
44 * Christie は当研究室で開発をしている並列分散通信フレームワークである
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
45 * 同じく当研究室で開発しているGearsOS に導入予定のため次のような概念を持っている
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
46
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
47 * CodeGear (クラスやスレッド)
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
48 * DataGear (変数データ)
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
49 * CodeGearManager (CG,DG,DGMを管理)
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
50 * DataGearManager (DGを管理,localとremoteの2種類がある, put操作によりDGを格納)
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
51
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
52 ---
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
53
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
54 ### Christie の基礎概念
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
55 <center><img src="https://i.imgur.com/ZvpoXGd.png" alt="message" width="450" height="300"></center>
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
56 <center>
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
57 Christie を同一プロセスで複数インスタンス立ち上げた際の接続の構造図
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
58 </center>
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
59
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
60
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
61 * 全てのCGM はThreadPool と他のCGM をList として共有している
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
62 * ThreadPool はCPU に合わせた並列度でqueue に入ったThread を逐次実行していく
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
63 * 1つのThreadPool で処理を行うことでCPU のコア数に適したThread を管理でき、並列度を下げ流ことを防ぐ
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
64 * ThreadPoolを共有することメタレベルで全てのCG/DG にアクセス可能
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
65
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
66 ---
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
67
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
68 ### Christie の基礎概念 annotationについて
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
69 DG を取り出すためにCG内に宣言した変数データにannotation をつける。annotationには以下の4つがある。
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
70
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
71 * Take
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
72 * 先頭のDG を読み込み、そのDG を削除する
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
73 * DG が複数ある場合Take を使用する
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
74 * Peek
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
75 * 先頭のDG を読み込むがDG を削除しない
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
76 * 操作をしない場合は同じデータを参照し続ける
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
77 * TakeFrom
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
78 * Take と同じ動作だが、remote 先のDGMを指定できる
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
79 * PeekFrom
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
80 * Peek と同じ動作だが、remote 先のDGMを指定できる
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
81
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
82 ---
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
83
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
84 ### Topology Manager
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
85 * Christie 上でNetwork Topology を形成する
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
86 * 参加を表明したノードに名前を与える
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
87 * 必要があればノード同士の配線を自動で行う
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
88
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
89 * 静的Topology と動的Topology 2種類がある
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
90
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
91 ---
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
92
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
93 ### Topology Manager
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
94 * 静的Topology は以下のようなdot ファイルを与えることでNode の関係を構築できる
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
95 * それぞれのNode への通信にはIP address などは使用せずright というlabel を使用することで接続できる
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
96
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
97 ```ring.dot
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
98 digraph test {
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
99 node0 -> node1 [label="right"]
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
100 node1 -> node2 [label="right"]
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
101 node2 -> node0 [label="right"]
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
102 }
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
103 ```
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
104
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
105 <center><img src="https://i.imgur.com/pCCHo2W.png" alt="message" width="200" height="300"></center>
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
106 <center></center>
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
107
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
108
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
109 <!---
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
110
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
111 ---
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
112
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
113 ### Christie のコード例
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
114
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
115 ``` java:StartHelloWorld.java
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
116 public class StartHelloWorld extends StartCodeGear {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
117
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
118 public StartHelloWorld(CodeGearManager cgm) {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
119 super(cgm);
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
120 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
121
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
122 public static void main(String[] args){
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
123 CodeGearManager cgm = createCGM(10000);
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
124 cgm.setup(new HelloWorldCodeGear());
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
125 cgm.setup(new FinishHelloWorld());
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
126 cgm.getLocalDGM().put("helloWorld","hello");
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
127 cgm.getLocalDGM().put("helloWorld","world");
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
128 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
129 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
130 ```
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
131
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
132 ```java:HelloWorldCodeGear.java
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
133 public class HelloWorldCodeGear extends CodeGear {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
134
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
135 @Take String helloWorld;
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
136
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
137 @Override
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
138 protected void run(CodeGearManager cgm) {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
139 System.out.print(helloWorld + " ");
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
140 cgm.setup(new HelloWorldCodeGear());
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
141 cgm.getLocalDGM().put(helloWorld,helloWorld);
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
142 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
143 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
144 ```
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
145
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
146 ```java:FinishHelloWorld.java
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
147 public class FinishHelloWorld extends CodeGear {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
148 @Take String hello;
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
149 @Take String world;
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
150
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
151 @Override
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
152 protected void run(CodeGearManager cgm) {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
153 cgm.getLocalDGM().finish();
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
154 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
155 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
156 ```
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
157 --->
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
158
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
159 ---
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
160
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
161 ### Java からの変更点
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
162 * Java とC# は基本的に書き方は変わらない
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
163
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
164
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
165 ```java:ex.java
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
166 Java
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
167 public class StartHelloWorld extends StartCodeGear { }
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
168
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
169 @Override
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
170 protected void run(CodeGearManager cgm) { }
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
171
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
172 @Take String helloWorld;
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
173 ```
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
174
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
175 ```cs:ex.cs
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
176 C#
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
177 public class StartHelloWorld : StartCodeGear { }
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
178
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
179 public override void Run(CodeGearManager cgm) { }
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
180
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
181 [Take] string helloWorld;
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
182 ```
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
183
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
184 ---
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
185
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
186 ### Christie \# のコード例
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
187 ```cs:StartHelloWorld.cs
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
188 public class StartHelloWorld : StartCodeGear {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
189
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
190 public StartHelloWorld(CodeGearManager cgm) : base(cgm) { }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
191
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
192 public static void Main(string[] args) {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
193 CodeGearManager cgm = CreateCgm(10000);
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
194 cgm.Setup(new HelloWorldCodeGear());
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
195 cgm.Setup(new FinishHelloWorld());
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
196 cgm.GetLocalDGM().Put("helloWorld", "hello");
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
197 cgm.GetLocalDGM().Put("helloWorld", "world");
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
198 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
199 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
200 ```
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
201
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
202 ```cs:HelloWorldCodeGear.cs
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
203 public class HelloWorldCodeGear : CodeGear {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
204 [Take] string helloWorld;
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
205
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
206 public override void Run(CodeGearManager cgm) {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
207 Console.Write(helloWorld + " ");
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
208 cgm.Setup(new HelloWorldCodeGear());
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
209 cgm.GetLocalDGM().Put(helloWorld, helloWorld);
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
210 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
211 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
212 ```
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
213
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
214 ```cs:FinishHelloWorld.cs
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
215 public class FinishHelloWorld : CodeGear {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
216 [Take] private string hello;
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
217 [Take] private string world;
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
218
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
219 public override void Run(CodeGearManager cgm) {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
220 cgm.GetLocalDGM().Finish();
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
221 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
222 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
223 ```
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
224
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
225 1. Main関数でCGM のインスタンス生成
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
226 2. 2つのCG をsetupして待ち状態にする
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
227 3. key:hellowWorld data:"hello" がTake される
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
228 4. 変数が揃ったためStartHelloWorld のRun が実行される
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
229 5. "hello" がprintされ、再び待ち状態になる。 key:hellow data:"hello"がput される
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
230 6. key:hellowWorld data:"world" がTake され、4,5と同様に処理される
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
231 7. 変数hello とworld がput され揃ったため、FinishHelloWorld のRun が実行され、プログラムは終了する
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
232
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
233
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
234
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
235
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
236 ### Unity
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
237 * UnityはUnity Technologies が開発を行っているゲームエンジンである
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
238 * 世界で最も使用されているゲームエンジン
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
239 * 非常に軽く、スペックが低いノートPCでもゲーム開発が可能
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
240 * プログラミング言語にはC# が採用されている
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
241 * C# のAPI やUnity 向けに拡張されたAPIも使用可能
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
242 * 開発した機能をUnity に組み込むことも可能
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
243
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
244 ---
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
245
65
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
246 ### Christie \# on Unityのコード例
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
247 ```cs:UnityStartHelloWorld.cs
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
248 public class StartHelloWorld : StartCodeGear {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
249
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
250 public StartHelloWorld(CodeGearManager cgm) : base(cgm) { }
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
251
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
252 public void RunCodeGear(CodeGearManager cgm) {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
253 cgm.Setup(new HelloWorldCodeGear());
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
254 cgm.Setup(new FinishHelloWorld());
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
255 cgm.GetLocalDGM().Put("helloWorld", "hello");
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
256 cgm.GetLocalDGM().Put("helloWorld", "world");
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
257 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
258 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
259 ```
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
260
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
261 ```cs:UnityHelloWorld.cs
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
262 public class HelloWorld : MonoBehaviour {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
263 void Start() {
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
264 CodeGearManager cgm = StartCodeGear.CreateCgm(10000);
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
265 var helloWorld = new StartHelloWorld(cgm);
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
266 helloWorld.RunCodeGear(cgm);
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
267 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
268 }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
269 ```
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
270 * HelloWorldCodeGearと、FinishHelloWorld はそのまま使用
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
271 * StartHelloWorld をUnity で使用できるように書き換え
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
272 * Unity ではMonoBehaviour 継承したクラスが動作可能
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
273 * ゲーム開始時に1度だけ呼ばれるStart 関数
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
274 * Start 関数でCGM のインスタンスを生成
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
275 * Main 関数を名前を変えたRunCodeGear 関数を実行
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
276
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
277 ---
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
278
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
279 ### Take annotationの実装
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
280 * Christie ではDGを取得するためにannotation を使用している
65
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
281 * C# ではannotation と同様の機能にattribute があり、Take をattribute で実装した
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
282
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
283 * Take はフィールド変数に対して適用する
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
284
64
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
285
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
286 ```java:Take.java
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
287 @Target(ElementType.FIELD)
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
288 @Retention(RetentionPolicy.RUNTIME)
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
289 public @interface Take { }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
290 ```
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
291
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
292 ```cs:Take.cs
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
293 [AttributeUsage(AttributeTargets.Field)]
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
294 public class Take : Attribute { }
bc17d71e22eb backup 2021-05-23
autobackup
parents: 63
diff changeset
295 ```
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
296
65
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
297 ---
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
298
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
299 ### MessagePackの相違点
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
300 * Christie ではMessagePack を使用してデータを圧縮し送受信している
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
301 * インスタンス内のpublic 変数に対して圧縮可能
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
302 * バージョンが古いため、現在はサポートされていない
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
303 * そのため、最新版とは記述方法が異なる
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
304
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
305 * 圧縮するクラスには@Message annotatoinをつける
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
306 * MessagePack インスタンスを作成後、write、read することでデータの圧縮解凍が可能
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
307 * 圧縮されたデータはbyte[] 型になる
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
308
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
309 ```java:MessagePackEx.java
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
310 public class MessagePackExample {
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
311 @Message
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
312 public static class MyMessage {
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
313 public String name;
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
314 public double version;
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
315 }
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
316
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
317 public static void main(String[] args) throws Exception {
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
318 MyMessage src = new MyMessage();
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
319 src.name = "msgpack";
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
320 src.version = 0.6;
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
321
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
322 MessagePack msgpack = new MessagePack();
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
323 // Serialize
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
324 byte[] bytes = msgpack.write(src);
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
325 // Deserialize
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
326 MyMessage dst = msgpack.read(bytes, MyMessage.class);
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
327 }
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
328 }
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
329 ```
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
330
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
331 ---
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
332
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
333 ### MessagePackの相違点
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
334 * C# のMessagePack は複数存在している
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
335 * java 版と似たような書き方をするMessagePack-CSharp を選択した
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
336
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
337 * 圧縮を行いたいクラスに対してMessagePackObject attribute を付ける
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
338 * 圧縮する変数に対してkey を設定できる
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
339 * 解凍時にjson として展開できる
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
340 * データの圧縮にはMessagePackSerializer.Serialize 関数を用い、byte[] に圧縮される
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
341 * データの解凍にはMessagePackSerializer.Deserialize 関数を使用する
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
342 * Deserialize 関数はジェネリスク関数であるため<>内に解凍するデータの型情報を記述する
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
343
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
344 ```cs.MessagePackEx.cs
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
345 [MessagePackObject]
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
346 public class MyClass {
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
347 [Key(0)]
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
348 public int Age { get; set; }
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
349 [Key(1)]
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
350 public string FirstName { get; set; }
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
351 [Key(2)]
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
352 public string LastName { get; set; }
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
353
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
354 static void Main(string[] args) {
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
355 var mc = new MyClass {
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
356 Age = 99,
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
357 FirstName = "hoge",
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
358 LastName = "huga",
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
359 };
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
360
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
361 byte[] bytes = MessagePackSerializer.Serialize(mc);
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
362 MyClass mc2 = MessagePackSerializer.Deserialize<MyClass>(bytes);
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
363
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
364 // [99,"hoge","huga"]
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
365 var json = MessagePackSerializer.ConvertToJson(bytes);
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
366 Console.WriteLine(json);
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
367 }
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
368 }
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
369 ```
65
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
370
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
371 ---
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
372
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
373 ### ThreadPoolからTaskへの書き換え
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
374 * Christie ではThreadPool を使用していた
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
375 * Christie # ではThreadPoolより高機能なTask を用いて書き換えを行った
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
376
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
377 * Task は複雑な非同期処理を通常のコーディングと同じ感覚で直感的に記述できる
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
378
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
379 * 裏でThreadPool が動くようになっている
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
380 * 大きく動作は変わらない
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
381
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
382 ---
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
383
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
384 ### ThreadPoolからTaskへの書き換え
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
385
65
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
386 ```java:PriorityThreadPoolExecutors.java
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
387 public class PriorityThreadPoolExecutors {
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
388
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
389 private static class PriorityThreadPoolExecutor extends ThreadPoolExecutor {
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
390 private static final int DEFAULT_PRIORITY = 0;
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
391 private static AtomicLong instanceCounter = new AtomicLong();
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
392
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
393 public PriorityThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
394 int keepAliveTime, TimeUnit unit) {
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
395 super(corePoolSize, maximumPoolSize, keepAliveTime, unit, (BlockingQueue) new PriorityBlockingQueue<ComparableTask>(10,
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
396 ComparableTask.comparatorByPriorityAndSequentialOrder()));
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
397 }
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
398
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
399 @Override
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
400 public void execute(Runnable command) {
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
401 super.execute(command);
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
402 }
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
403 }
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
404 }
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
405 ```
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
406
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
407
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
408
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
409 ```cs:ThreadPoolExecuters.cs
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
410 public class ThreadPoolExecutors {
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
411
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
412 public ThreadPoolExecutors(int nWorkerThreads, int nIOThreads) {
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
413 ThreadPool.SetMinThreads(nWorkerThreads, nIOThreads);
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
414 }
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
415
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
416 public void Execute(CodeGearExecutor command) {
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
417 Task.Factory.StartNew(() => command.Run());
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
418 }
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
419 }
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
420 ```
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
421
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
422 ---
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
423
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
424 ### Unityで使用されているライブラリとの比較
65
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
425 Unityで使用されている既存のライブラリとして、Photon Unity Networking 2(PUN2)、MLAPIと、Christie # の比較を行う。
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
426
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
427 | | Christie # | PUN2 | MLAPI |
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
428 |--- |--- | --- |---|
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
429 |通信方式 |p2p |クライアントサーバ方式 | クライアントサーバ方式|
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
430 |プロトコル | TCP | TCP | TCP |
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
431 |特徴 |通信のためのIP address がプログラム直接記述されていない |Photon Cloud でサーバを自前で用意する必要がない | Unity公式でサポートされている RPC が使用可能|
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
432
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
433 ---
65
937323467f4d backup 2021-05-24
autobackup
parents: 64
diff changeset
434
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
435 ### チート対策について
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
436 * オンラインゲームにおいてチート対策は必須
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
437 * 通常のオンラインゲームでのチート対策
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
438 * クライアントをモニタリングする
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
439 * ダメージ計算などは全てサーバで行う
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
440 * ユーザからの通報
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
441
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
442 * Christie では型があるDataGear をkey と合わせてDGMに格納する方式を取っている
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
443 * 他のノードとの通信にはDGM のporxy に書き込むことで可能
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
444 * DGM の構成にはTopology Manager が自動的に構成する
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
445 * Topology Manager を使用することでクライアントは接続先を直接知る必要がない
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
446 * IP address などチートに使用される情報をプログラムに含めることなく通信可能
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
447
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
448 <center><img src="https://i.imgur.com/L8GVFdL.png" alt="message" width="450" height="260"></center>
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
449 <center>label を使用したデータ通信</center>
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
450
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
451 ### 実装の現状
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
452 * Local DGMを使用してUnity 上でデータ通信を行うことができている
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
453 * Scketo とMessagePack を用いた通信に関しては、書き換え途中
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
454 * 独自クラスをMessagePack でserialize できない
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
455 * 今後の予定
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
456 * Christie で実装されている例題
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
457 * Alice からChristie に書き換えた際に取り除かれた機能の洗い出しを行う
69
912d10e02a20 backup 2021-05-28
autobackup
parents: 68
diff changeset
458 * Unity でChristie #の検証として100人規模のFPS の作成
62
0c5df5736436 backup 2021-05-19
autobackup
parents:
diff changeset
459
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
460 ---
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
461
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
462 ### まとめ
68
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
463 * Christie をUnity で使用するためにC# に書き換えを行った
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
464 * 書き換え方針としては、attribute やMessagePack などC# 独自の機能に対応しつつ元のソースコードと同一になるようにした
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
465 * 実装としては、localDataGearManager を用いた同一プロセスで複数インスタンス立ち上げによる通信が可能
6c46d8f76ec4 backup 2021-05-27
autobackup
parents: 67
diff changeset
466 * Remote DataGearManager を使用した複数台の通信については書き換え途中であり、引き続き行っていく
69
912d10e02a20 backup 2021-05-28
autobackup
parents: 68
diff changeset
467 * Christie の検証のためUnity で100人規模のFPS を作成する
67
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
468
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
469
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
470
a4f167def66b backup 2021-05-26
autobackup
parents: 65
diff changeset
471