/// <summary> /// Subscribes the manager to <see cref="room" />'s networked events /// and starts measuring latency to the server. /// </summary> public virtual void RegisterRoomHandlers() { LSLog.LogImportant($"sessionId: {_room.SessionId}"); if (_pingThread != null) { _pingThread.Abort(); _pingThread = null; } _pingThread = new Thread(RunPingThread); _pingThread.Start(_room); _room.OnLeave += OnLeaveRoom; _room.OnStateChange += OnStateChangeHandler; _room.OnMessage <ExampleNetworkedUser>("onJoin", currentNetworkedUser => { Debug.Log($"Received 'ExampleNetworkedUser' after join/creation call {currentNetworkedUser.id}!"); Debug.Log(Json.SerializeToString(currentNetworkedUser)); _currentNetworkedUser = currentNetworkedUser; }); _room.OnMessage <ExampleRFCMessage>("onRFC", _rfc => { //Debug.Log($"Received 'onRFC' {_rfc.entityId}!"); if (_entityViews.Keys.Contains(_rfc.entityId)) { _entityViews[_rfc.entityId].RemoteFunctionCallHandler(_rfc); } }); _room.OnMessage <ExamplePongMessage>(0, message => { _lastPong = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); _serverTime = message.serverTime; _waitForPong = false; }); //Custom game logic //_room.OnMessage<YOUR_CUSTOM_MESSAGE>("messageNameInCustomLogic", objectOfTypeYOUR_CUSTOM_MESSAGE => { }); //======================== _room.State.networkedEntities.OnAdd += OnEntityAdd; _room.State.networkedEntities.OnRemove += OnEntityRemoved; _room.State.networkedUsers.OnAdd += OnUserAdd; _room.State.networkedUsers.OnRemove += OnUserRemove; _room.State.TriggerAll(); //======================== _room.colyseusConnection.OnError += Room_OnError; _room.colyseusConnection.OnClose += Room_OnClose; }
/// <summary> /// Subscribes the manager to <see cref="room" />'s networked events /// and starts measuring latency to the server. /// </summary> public virtual void RegisterRoomHandlers() { LSLog.LogImportant($"sessionId: {_room.SessionId}"); if (_pingThread != null) { _pingThread.Abort(); _pingThread = null; } _pingThread = new Thread(RunPingThread); _pingThread.Start(_room); _room.OnLeave += OnLeaveRoom; _room.OnStateChange += OnStateChangeHandler; _room.OnMessage <ExampleNetworkedUser>("onJoin", currentNetworkedUser => { Debug.Log($"Received 'ExampleNetworkedUser' after join/creation call {currentNetworkedUser.id}!"); Debug.Log(Json.SerializeToString(currentNetworkedUser)); _currentNetworkedUser = currentNetworkedUser; }); _room.OnMessage <ExampleRFCMessage>("onRFC", _rfc => { //Debug.Log($"Received 'onRFC' {_rfc.entityId}!"); if (_entityViews.Keys.Contains(_rfc.entityId)) { _entityViews[_rfc.entityId].RemoteFunctionCallHandler(_rfc); } }); _room.OnMessage <ExamplePongMessage>(0, message => { _lastPong = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); _serverTime = message.serverTime; _waitForPong = false; }); //Custom game logic _room.OnMessage <ShootingGalleryNewTargetLineUpMessage>("newTargetLineUp", targets => { onGotTargetLineUp?.Invoke(targets); }); _room.OnMessage <ShootingGalleryScoreUpdateMessage>("onScoreUpdate", scoreUpdate => { onScoreUpdate?.Invoke(scoreUpdate); }); _room.OnMessage <ShootingGalleryMessage>("beginRoundCountDown", msg => { onBeginRoundCountDown?.Invoke(); }); _room.OnMessage <ShootingGalleryMessage>("beginRound", msg => { onBeginRound?.Invoke(); }); _room.OnMessage <ShootingGalleryRoundEndMessage>("onRoundEnd", winner => { onRoundEnd?.Invoke(winner.winner); }); //======================== Debug.Log($"Adding OnAdd/OnRemove callbacks for all {_room.State.networkedEntities.Count} entities! ***"); _room.State.networkedEntities.OnAdd += OnEntityAdd; _room.State.networkedEntities.OnRemove += OnEntityRemoved; _room.State.networkedUsers.OnAdd += OnUserAdd; _room.State.networkedUsers.OnRemove += OnUserRemove; _room.State.TriggerAll(); //======================== _room.colyseusConnection.OnError += Room_OnError; _room.colyseusConnection.OnClose += Room_OnClose; }