Exemple #1
0
        public void Dispose()
        {
            if (IsDisposed)
            {
                return;
            }
            IsDisposed = true;

            IsExitingValue.Update(b => true);
            ssm.NotifyExit();

            Server.SessionMappings.DoAction(Mappings =>
            {
                if (Mappings.ContainsKey(Context))
                {
                    Mappings.Remove(Context);
                }
            });
            Server.ServerContext.TryUnregisterSession(Context);

            si.Dispose();

            IsRunningValue.Update(b => false);

            SpinWait.SpinUntil(() => ssm.IsExited());

            Context.Dispose();

            IsExitingValue.Update(b => false);

            if (Server.ServerContext.EnableLogSystem)
            {
                Server.ServerContext.RaiseSessionLog(new SessionLogEntry {
                    Token = Context.SessionTokenString, RemoteEndPoint = RemoteEndPoint, Time = DateTime.UtcNow, Type = "Sys", Name = "SessionExit", Message = ""
                });
            }
        }