private void InitializeEvents() { _photonClient.StateChanged += (oldState, newState) => { if (newState != ClientState.Joined) { var reason = PhotonUtils.ConvertPhotonDisconnectCause(_photonClient.DisconnectedCause); DisconnectedSubject.OnNext(reason); } }; _photonClient.EventReceived += data => { switch (data.Code) { case EventCode.Join: AddClient(new Client((int)data.Parameters[ParameterCode.ActorNr]), true); break; case EventCode.Leave: RemoveClient((int)data.Parameters[ParameterCode.ActorNr]); if (data.Parameters.ContainsKey(ParameterCode.MasterClientId)) { int newHostId = (int)data.Parameters[ParameterCode.MasterClientId]; if (newHostId != Server.ClientId) { MigrateHost(newHostId, Server.ClientId, false); } } break; case EventCode.PropertiesChanged: var properties = (Hashtable)data.Parameters[ParameterCode.Properties]; if (properties.ContainsKey(GamePropertyKey.MasterClientId)) { int newHostId = (int)properties[GamePropertyKey.MasterClientId]; MigrateHost(newHostId, Server.ClientId, false); } break; case PhotonEventCode: var buffer = (PhotonArrayWrapper)data.Parameters[ParameterCode.Data]; var evt = Serializer.Deserialize(buffer.Array, buffer.Length); EventSubject.OnNext(evt); break; } }; }
private void InitializeEvents() { _photonClient.StateChanged += (oldState, newState) => { switch (newState) { case ClientState.Disconnecting: State = ConnectionState.Disconnecting; break; case ClientState.Disconnected: var reason = PhotonUtils.ConvertPhotonDisconnectCause(_photonClient.DisconnectedCause); _disconnectedSubject.OnNext(reason); State = ConnectionState.Disconnected; break; } }; }