-
Notifications
You must be signed in to change notification settings - Fork 1
/
NetworkSystem.hpp
256 lines (167 loc) · 8.94 KB
/
NetworkSystem.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
//いじる必要なし
//サーバーへの通信用の関数一覧
# pragma once
# include <Siv3D.hpp>
// Photono SDK クラスの前方宣言
namespace ExitGames
{
namespace LoadBalancing
{
class Listener;
class Client;
}
}
enum class networkID
{
position,
getitem,
};
namespace Set_Val
{
const bool Output_Print = false;
}
namespace s3d
{
namespace NetworkSystem
{
/// @brief 暗号化された Photon アプリケーション ID を復号します。
/// @param encryptedPhotonAppID 暗号化された Photon アプリケーション ID
/// @return 復号された Photon アプリケーション ID
inline String DecryptPhotonAppID(StringView encryptedPhotonAppID)
{
// [Siv3D ToDo] あとで実装
return String{ encryptedPhotonAppID };
}
inline constexpr int32 NoRandomMatchFound = (0x7FFF - 7);
}
class SivPhoton
{
public:
/// @brief SivPhoton を作成します。
/// @param secretPhotonAppID Photon アプリケーション ID
/// @param photonAppVersion アプリケーションのバージョンです。
/// @remark アプリケーションバージョンが異なる SivPhoton とは通信できません。
SivPhoton(StringView secretPhotonAppID, StringView photonAppVersion);
virtual ~SivPhoton();
/// @brief Photon サーバへの接続を試みます。
/// @param userName ユーザ名
void connect(StringView userName = U"", const Optional<String>& defaultRoomName = unspecified);
void disconnect();
/// @brief サーバーといい感じにします。
/// @remark 6 秒間以上この関数を呼ばないと自動的に切断されます。
void update();
/// @brief ルーム
/// @param maxPlayers ルームの最大人数
/// @remark 最大 255, 無料の Photon アカウントの場合は 20
void opJoinRandomRoom(int32 maxPlayers);
void opJoinRoom(StringView roomName, bool rejoin = false);
void opCreateRoom(StringView roomName, int32 maxPlayers);
void opLeaveRoom();
template <class T>
void opRaiseEventCustomType(uint8 eventCode, const T& value);
void opRaiseEvent(uint8 eventCode, const int32 value);
void opRaiseEvent(uint8 eventCode, const double value);
void opRaiseEvent(uint8 eventCode, const float value);
void opRaiseEvent(uint8 eventCode, const bool value);
void opRaiseEvent(uint8 eventCode, const StringView value);
void opRaiseEvent(uint8 eventCode, const Array<int32>& value);
void opRaiseEvent(uint8 eventCode, const Array<double>& value);
void opRaiseEvent(uint8 eventCode, const Array<float>& value);
void opRaiseEvent(uint8 eventCode, const Array<bool>& value);
void opRaiseEvent(uint8 eventCode, const Array<String>& value);
void opRaiseEvent(uint8 eventCode, const Grid<int32>& value);
void opRaiseEvent(uint8 eventCode, const Grid<double>& value);
void opRaiseEvent(uint8 eventCode, const Grid<float>& value);
void opRaiseEvent(uint8 eventCode, const Grid<bool>& value);
void opRaiseEvent(uint8 eventCode, const Grid<String>& value);
//template <class Type>
//void opRaiseEvent(uint8 eventCode, const HashTable<uint8, Type>& parameters);
/// @brief サーバに接続したときのユーザ名を返します。
/// @return ユーザ名
[[nodiscard]]
String getName() const;
/// @brief サーバに接続したときのユーザ ID (ユーザ名 + タイムスタンプ)を返します。
/// @return ユーザ ID
[[nodiscard]]
String getUserID() const;
/// @brief 存在するルーム名の一覧を返します。
/// @remark 自分でルームを作成してそれに参加すると表示されないっぽい (?)
/// @return 存在するルーム名の一覧
[[nodiscard]]
Array<String> getRoomNameList() const;
/// @brief 存在するルームのプレイヤー数の一覧を返します。
/// @return 存在するルームのプレイヤー数の一覧
[[nodiscard]]
Array<int> getRoomplayernum() const;
/// @brief 自分がルームに参加しているかを返します。
/// @return ルームに参加している場合 true, それ以外の場合は false
[[nodiscard]]
bool isInRoom() const;
[[nodiscard]]
String getCurrentRoomName() const;
[[nodiscard]]
int32 getPlayerCountInCurrentRoom() const;
[[nodiscard]]
int32 getMaxPlayersInCurrentRoom() const;
[[nodiscard]]
bool getIsOpenInCurrentRoom() const;
/// @brief ルーム内でのプレイヤー ID を返します。
/// @return ルーム内でのプレイヤー ID, ルームに参加していない場合は none
[[nodiscard]]
Optional<int32> localPlayerID() const;
/// @brief 自分がマスタークライアントであるかを返します。
/// @return マスタークライアントである場合 true, それ以外の場合は false
[[nodiscard]]
bool isMasterClient() const;
/// @brief ルーム内でのプレイヤー ID を返します。(?)
/// @return ルーム内でのプレイヤー ID (?)
[[nodiscard]]
int32 getNumber() const;
virtual void connectionErrorReturn(int32 errorCode);
virtual void connectReturn(int32 errorCode, const String& errorString, const String& region, const String& cluster);
virtual void disconnectReturn();
virtual void leaveRoomReturn(int32 errorCode, const String& errorString);
virtual void joinRandomRoomReturn(int32 localPlayerID, int32 errorCode, const String& errorString);
virtual void joinRoomReturn(int32 localPlayerID, int32 errorCode, const String& errorString);
virtual void joinRoomEventAction(int32 localPlayerID, const Array<int32>& playerIDs, bool isSelf);
virtual void leaveRoomEventAction(int32 playerID, bool isInactive);
virtual void createRoomReturn(int32 localPlayerID, int32 errorCode, const String& errorString);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const int32 eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const double eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const float eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const bool eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const String& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Array<int32>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Array<double>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Array<float>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Array<bool>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Array<String>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Grid<int32>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Grid<double>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Grid<float>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Grid<bool>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Grid<String>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Point& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Vec2& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Rect& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Circle& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Array<Point>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Array<Vec2>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Array<Rect>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Array<Circle>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Grid<Point>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Grid<Vec2>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Grid<Rect>& eventContent);
virtual void customEventAction(const int32 playerID, const int32 eventCode, const Grid<Circle>& eventContent);
protected:
String m_defaultRoomName;
private:
class SivPhotonDetail;
std::unique_ptr<ExitGames::LoadBalancing::Listener> m_listener;
std::unique_ptr<ExitGames::LoadBalancing::Client> m_client;
/// @brief リスナーの参照を返します。
/// @return リスナーの参照
[[nodiscard]]
ExitGames::LoadBalancing::Client& getClient();
};
}