Skip to content

Commit d90cc46

Browse files
committed
schema serializer ported to csharp/unity3d
1 parent 7a868b9 commit d90cc46

32 files changed

+3659
-2788
lines changed

Assets/ColyseusClient.cs

Lines changed: 27 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Collections.Generic;
66
using System;
77
using Colyseus;
8+
using Colyseus.Schema;
89

910
using GameDevWare.Serialization;
1011

@@ -18,10 +19,9 @@ public class ColyseusClient : MonoBehaviour {
1819
public string roomName = "demo";
1920

2021
protected Client client;
21-
protected Room room;
22+
protected Room<State> room;
2223

23-
// map of players
24-
protected Dictionary<string, GameObject> players = new Dictionary<string, GameObject>();
24+
protected IndexedDictionary<Player, GameObject> players = new IndexedDictionary<Player, GameObject>();
2525

2626
// Use this for initialization
2727
IEnumerator Start () {
@@ -68,7 +68,7 @@ void ConnectToServer ()
6868

6969
void JoinRoom ()
7070
{
71-
room = client.Join(roomName, new Dictionary<string, object>()
71+
room = client.Join<State>(roomName, new Dictionary<string, object>()
7272
{
7373
{ "create", true }
7474
});
@@ -85,10 +85,9 @@ void JoinRoom ()
8585
Debug.Log("Joined room successfully.");
8686
m_SessionIdText.text = "sessionId: " + room.SessionId;
8787

88-
room.Listen("players/:id", OnPlayerChange, true);
89-
room.Listen("players/:id/:axis", OnPlayerMove);
90-
room.Listen("messages/:number", OnMessageAdded);
91-
room.Listen(OnChangeFallback);
88+
room.State.players.OnAdd += OnPlayerAdd;
89+
room.State.players.OnRemove += OnPlayerRemove;
90+
room.State.players.OnChange += OnPlayerMove;
9291

9392
PlayerPrefs.SetString("sessionId", room.SessionId);
9493
PlayerPrefs.Save();
@@ -107,7 +106,7 @@ void ReJoinRoom ()
107106
return;
108107
}
109108

110-
room = client.ReJoin(roomName, sessionId);
109+
room = client.ReJoin<State>(roomName, sessionId);
111110

112111
room.OnReadyToConnect += (sender, e) => {
113112
Debug.Log("Ready to connect to room!");
@@ -119,10 +118,7 @@ void ReJoinRoom ()
119118
m_SessionIdText.text = "sessionId: " + room.SessionId;
120119

121120
// only register listeners after OnJoin.
122-
room.Listen("players/:id", OnPlayerChange, true);
123-
room.Listen("players/:id/:axis", OnPlayerMove);
124-
room.Listen("messages/:number", OnMessageAdded);
125-
room.Listen(OnChangeFallback);
121+
// TODO: ????
126122
};
127123

128124
room.OnStateChange += OnStateChangeHandler;
@@ -134,7 +130,7 @@ void LeaveRoom()
134130
room.Leave(false);
135131

136132
// Destroy player entities
137-
foreach (KeyValuePair<string, GameObject> entry in players)
133+
foreach (KeyValuePair<Player, GameObject> entry in players)
138134
{
139135
Destroy(entry.Value);
140136
}
@@ -160,71 +156,42 @@ void OnMessage (object sender, MessageEventArgs e)
160156
Debug.Log(message);
161157
}
162158

163-
void OnStateChangeHandler (object sender, StateChangeEventArgs e)
159+
void OnStateChangeHandler (object sender, StateChangeEventArgs<State> e)
164160
{
165161
// Setup room first state
166162
Debug.Log("State has been updated!");
167163
}
168164

169-
void OnPlayerChange (DataChange change)
165+
void OnPlayerAdd(object sender, KeyValueEventArgs<Player, string> item)
170166
{
171-
Debug.Log ("OnPlayerChange");
172-
Debug.Log (change.operation);
173-
Debug.Log (change.path["id"]);
174-
// Debug.Log (change.value);
167+
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
175168

176-
if (change.operation == "add") {
177-
IndexedDictionary<string, object> value = (IndexedDictionary<string, object>) change.value;
169+
Debug.Log("Player add! x => " + item.Value.x + ", y => " + item.Value.y);
178170

179-
GameObject cube = GameObject.CreatePrimitive (PrimitiveType.Cube);
171+
cube.transform.position = new Vector3(item.Value.x, item.Value.y, 0);
180172

181-
cube.transform.position = new Vector3 (Convert.ToSingle(value ["x"]), Convert.ToSingle(value ["y"]), 0);
182-
183-
// add "player" to map of players by id.
184-
players.Add (change.path ["id"], cube);
185-
186-
} else if (change.operation == "remove") {
187-
// remove player from scene
188-
GameObject cube;
189-
players.TryGetValue (change.path ["id"], out cube);
190-
Destroy (cube);
191-
192-
players.Remove (change.path ["id"]);
193-
}
173+
// add "player" to map of players
174+
players.Add(item.Value, cube);
194175
}
195176

196-
void OnPlayerMove (DataChange change)
177+
void OnPlayerRemove(object sender, KeyValueEventArgs<Player, string> item)
197178
{
198-
// Debug.Log ("OnPlayerMove");
199-
// Debug.Log ("playerId: " + change.path["id"] + ", Axis: " + change.path["axis"]);
200-
// Debug.Log (change.value);
201-
202179
GameObject cube;
203-
players.TryGetValue (change.path ["id"], out cube);
180+
players.TryGetValue(item.Value, out cube);
181+
Destroy(cube);
204182

205-
cube.transform.Translate (new Vector3 (Convert.ToSingle(change.value), 0, 0));
183+
players.Remove(item.Value);
206184
}
207185

208-
void OnPlayerRemoved (DataChange change)
209-
{
210-
// Debug.Log ("OnPlayerRemoved");
211-
// Debug.Log (change.path);
212-
// Debug.Log (change.value);
213-
}
214186

215-
void OnMessageAdded (DataChange change)
187+
void OnPlayerMove (object sender, KeyValueEventArgs<Player, string> item)
216188
{
217-
// Debug.Log ("OnMessageAdded");
218-
// Debug.Log (change.path["number"]);
219-
// Debug.Log (change.value);
220-
}
189+
GameObject cube;
190+
players.TryGetValue (item.Value, out cube);
221191

222-
void OnChangeFallback (PatchObject change)
223-
{
224-
// Debug.Log ("OnChangeFallback");
225-
// Debug.Log (change.operation);
226-
// Debug.Log (change.path);
227-
// Debug.Log (change.value);
192+
Debug.Log(item.Value.x);
193+
194+
cube.transform.Translate (new Vector3 (item.Value.x, item.Value.y, 0));
228195
}
229196

230197
void OnApplicationQuit()

Assets/ColyseusClient.cs.meta

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)