protected override void OnDestroy() { if (discoveryClient != null) { discoveryClient.RemoveListener(discoveryClientAdapter); discoveryClient.Dispose(); discoveryClient = null; if (discoveryClientAdapter != null) { discoveryClientAdapter.Dispose(); discoveryClientAdapter = null; } } if (SessionUsersTracker != null) { SessionUsersTracker.Dispose(); SessionUsersTracker = null; } if (SessionsTracker != null) { SessionsTracker.Dispose(); SessionsTracker = null; } if (Connection != null) { Connection.RemoveListener((byte)MessageID.StatusOnly, networkConnectionAdapter); Connection.Dispose(); if (networkConnectionAdapter != null) { networkConnectionAdapter.Dispose(); networkConnectionAdapter = null; } } if (Manager != null) { // Force a disconnection so that we can stop and start Unity without connections hanging around. Manager.GetPairedConnection().Disconnect(); Manager.GetServerConnection().Disconnect(); Manager.Dispose(); Manager = null; } // Forces a garbage collection to try to clean up any additional reference to SWIG-wrapped objects. GC.Collect(); base.OnDestroy(); }
private void ManagerInit(bool setConnection) { var config = new ClientConfig(ClientRole); config.SetIsAudioEndpoint(IsAudioEndpoint); config.SetLogWriter(logWriter); if (setConnection) { config.SetServerAddress(ServerAddress); config.SetServerPort(ServerPort); } Manager = SharingManager.Create(config); // Set up callbacks so that we know when we've connected successfully. networkConnectionAdapter = new NetworkConnectionAdapter(); networkConnectionAdapter.ConnectedCallback += OnNetworkConnectionChanged; networkConnectionAdapter.DisconnectedCallback += OnNetworkConnectionChanged; Connection.AddListener((byte)MessageID.StatusOnly, networkConnectionAdapter); SyncStateListener = new SyncStateListener(); Manager.RegisterSyncListener(SyncStateListener); Root = new SyncRoot(Manager.GetRootSyncObject()); SessionsTracker = new ServerSessionsTracker(Manager.GetSessionManager()); SessionUsersTracker = new SessionUsersTracker(SessionsTracker); RoomManagerAdapter = new RoomManagerAdapter(); CurrentRoomManager.AddListener(RoomManagerAdapter); using (var userName = new XString(DefaultUserName)) { #if UNITY_WSA && !UNITY_EDITOR Manager.SetUserName(SystemInfo.deviceName); #else if (!string.IsNullOrEmpty(Environment.UserName)) { Manager.SetUserName(Environment.UserName); } else { User localUser = Manager.GetLocalUser(); Manager.SetUserName(userName + localUser.GetID().ToString()); } #endif } }