Пример #1
0
 private void SaveSessionToDatabase(SessionId sessionId, User user, ConnectionTicket ticket)
 {
     lock (_lockObj)
     {
         try
         {
             using (ServerDataContext context = new ServerDataContext())
             {
                 ActiveSession session = new ActiveSession
                 {
                     Id             = ObjectId.NewId(),
                     SessionId      = sessionId.ToString(),
                     UserId         = user.Id,
                     ClientComputer = ticket.ClientComputer,
                     Port           = ticket.Port
                 };
                 context.ActiveSessions.Add(session);
                 context.SaveChanges();
             }
         }
         catch (Exception e)
         {
             ApplicationContext.Log.Error(GetType(), e);
             throw;
         }
     }
 }
Пример #2
0
 public UserData CreateUser(string username)
 {
     lock (_lockObj)
     {
         using (ServerDataContext context = new ServerDataContext())
         {
             User user = context.Users.Create();
             user.Id            = ObjectId.NewId();
             user.Name          = username;
             user.SecurityToken = ObjectId.NewId().ToString();
             context.Users.Add(user);
             context.SaveChanges();
             return(context.CreateUserData(user));
         }
     }
 }
Пример #3
0
 public bool ChangeUserName(Guid userId, string newName)
 {
     lock (_lockObj)
     {
         using (ServerDataContext context = new ServerDataContext())
         {
             User user = context.Users.Find(userId);
             if (user == null)
             {
                 return(false);
             }
             user.Name = newName;
             context.SaveChanges();
             return(true);
         }
     }
 }
Пример #4
0
        public bool RemoveUser(Guid userId)
        {
            lock (_lockObj)
            {
                using (ServerDataContext context = new ServerDataContext())
                {
                    User user = context.Users.Find(userId);
                    if (user == null)
                    {
                        return(false);
                    }

                    context.Users.Remove(user);
                    context.SaveChanges();
                    return(true);
                }
            }
        }
Пример #5
0
 private void RemoveSessionFromDatabase(SessionId sessionId)
 {
     lock (_lockObj)
     {
         try
         {
             using (ServerDataContext context = new ServerDataContext())
             {
                 context.RemoveSession(sessionId);
                 context.SaveChanges();
             }
         }
         catch (Exception e)
         {
             ApplicationContext.Log.Error(GetType(), e);
             throw;
         }
     }
 }
Пример #6
0
        public void ReconnectSessions()
        {
            using (ServerDataContext context = new ServerDataContext())
            {
                List <SessionId> toRemove = new List <SessionId>();
                foreach (ActiveSession session in context.ActiveSessions)
                {
                    SessionId   sessionId = new SessionId(session.SessionId);
                    SessionData data      = new SessionData(sessionId, context.CreateFakeTicket(session));
                    _sessions.TryAdd(sessionId, data);
                    try
                    {
                        using (ClientProxy proxy = CreateClientProxy(data.Ticket))
                        {
                            proxy.ConnectionRestarted();
                            Logger.Info("Restarted session to computer {0}.", data.Ticket.ClientComputer);
                        }
                    }
                    catch (Exception e)
                    {
                        toRemove.Add(sessionId);
                        ApplicationContext.Log.Error(GetType(), e);
                        ApplicationContext.Log.Info(GetType(), "Removed session to: {0}", data.Ticket.ClientComputer);
                    }
                }

                if (toRemove.Count > 0)
                {
                    foreach (SessionId sessionId in toRemove)
                    {
                        SessionData tmpData;
                        context.RemoveSession(sessionId);
                        _sessions.TryRemove(sessionId, out tmpData);
                    }
                    context.SaveChanges();
                }
            }
        }