// Tự động hóa việc Logoff các User ở trạng thái disconnected. public void RemoveDisconnectSessions(int sessionID) { int k = 0; foreach (DisconnectSession dcss in ListDisconnectedSessions) { if (dcss.SessionID == sessionID) { ListDisconnectedSessions.RemoveAt(k); ListSessions.LogofftUserSession(WTS_CURRENT_SERVER_HANDLE, sessionID, false); break; } k++; } }
public void UpdateTimeDisconnection(Session[] listSessions, int timeUpdate) { int k = 0; bool isDisconnect; for (int i = 0; i < listSessions.Length; i++) { int currSessionID = listSessions[i].sessionID; string currUserName = listSessions[i].userName; // Xét xem Session User này có nằm trong danh sách được lọc hay không. // Nếu có thì sẽ không tự động Logoff User này. isDisconnect = true; List_FilterUsers = Load_FilterLogoffUsers(); foreach (var obj in List_FilterUsers) { if (obj.UserName.Equals(currUserName)) { isDisconnect = false; break; } } if (isDisconnect == true) { if (listSessions[i].connectedState == Enums.CONNECTSTATE_CLASS.Disconnected) { k = 0; if (ListDisconnectedSessions.Count > 0) { foreach (DisconnectSession dcss in ListDisconnectedSessions) { if (dcss.SessionID == currSessionID) { if (dcss.TimeHasDisconnected >= MaxTime) { // Đã đạt ngưỡng thời gian giới hạn. Hệ thống sẽ tự động logoff user này. ListDisconnectedSessions.RemoveAt(k); ListSessions.LogofftUserSession(WTS_CURRENT_SERVER_HANDLE, currSessionID, false); Logging.WriteLogSessions("User " + currUserName + " bị hệ thống tự động tắt khỏi máy chủ", "Auto Logoff"); break; } else { dcss.TimeHasDisconnected += timeUpdate; break; } } else if (++k >= ListDisconnectedSessions.Count) { // Nếu user này vừa mới disconnect nên chưa tồn tại trong danh sách disconnect // Ta thêm user này vào danh sách disconnect ListDisconnectedSessions.Add(new DisconnectSession(currSessionID, currUserName, timeUpdate)); // Logging.WriteLogSessions("User " + currUserName + " rời khỏi máy chủ", "Disconnect"); break; } } } else { // Nếu danh sách disconnect chưa có gì, ta thêm user vừa mới disconnect ListDisconnectedSessions.Add(new DisconnectSession(currSessionID, currUserName, timeUpdate)); // Logging.WriteLogSessions("User " + currUserName + " thoát khỏi máy chủ", "Disconnect"); } } else { // Nếu User kết nối lại thì xóa user này trong danh sách disconnect sessions k = 0; foreach (DisconnectSession dcss in ListDisconnectedSessions) { if (dcss.SessionID == currSessionID) { ListDisconnectedSessions.RemoveAt(k); // Logging.WriteLogSessions("User " + currUserName + " kết nối lại vào máy chủ", "Reconnect"); break; } k++; } } } } }