protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                OnServerDisconnected();

                if (sessionManagerAdapter != null)
                {
                    sessionManagerAdapter.ServerConnectedEvent    -= OnServerConnected;
                    sessionManagerAdapter.ServerDisconnectedEvent -= OnServerDisconnected;
                    sessionManagerAdapter.SessionClosedEvent      -= OnSessionClosed;
                    sessionManagerAdapter.SessionAddedEvent       -= OnSessionAdded;
                    sessionManagerAdapter.CreateSucceededEvent    -= OnSessionCreatedSuccess;
                    sessionManagerAdapter.CreateFailedEvent       -= OnSessionCreatedFail;
                    sessionManagerAdapter.UserChangedEvent        -= OnUserChanged;
                    sessionManagerAdapter.UserJoinedSessionEvent  -= OnUserJoined;
                    sessionManagerAdapter.UserLeftSessionEvent    -= OnUserLeft;
                    sessionManagerAdapter.Dispose();
                    sessionManagerAdapter = null;
                }

                if (sessionManager != null)
                {
                    sessionManager.Dispose();
                    sessionManager = null;
                }
            }

            disposed = true;
        }
        public ServerSessionsTracker(SessionManager sessionMgr)
        {
            sessionManager = sessionMgr;
            Sessions       = new List <Session>();

            if (sessionManager != null)
            {
                sessionManagerAdapter = new SessionManagerAdapter();
                sessionManagerAdapter.ServerConnectedEvent    += OnServerConnected;
                sessionManagerAdapter.ServerDisconnectedEvent += OnServerDisconnected;
                sessionManagerAdapter.SessionClosedEvent      += OnSessionClosed;
                sessionManagerAdapter.SessionAddedEvent       += OnSessionAdded;
                sessionManagerAdapter.CreateSucceededEvent    += OnSessionCreatedSuccess;
                sessionManagerAdapter.CreateFailedEvent       += OnSessionCreatedFail;
                sessionManagerAdapter.UserChangedEvent        += OnUserChanged;
                sessionManagerAdapter.UserJoinedSessionEvent  += OnUserJoined;
                sessionManagerAdapter.UserLeftSessionEvent    += OnUserLeft;
                sessionManager.AddListener(sessionManagerAdapter);
            }
        }