62,614
社区成员
发帖
与我相关
我的任务
分享
package client.login;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.SplashScreen;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
import javax.swing.ImageIcon;
import javax.swing.Timer;
import javax.swing.ToolTipManager;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.packet.VCard;
import swingx.crazy.componentx.JADialog;
import swingx.crazy.componentx.JAFrame;
import swingx.crazy.componentx.JAMessageBox;
import swingx.crazy.security.Checker;
import swingx.crazy.systeminfo.OSUtils;
import swingx.crazy.util.Config;
import swingx.crazy.util.UIUtil;
import swingx.crazy.util.Util;
import client.SystemTrayIcon;
import client.beans.user.User;
import client.data.LocalDataConnection;
import client.resources.Resources;
import client.skin.Skin;
import client.util.ClientConfig;
import client.util.ClientUtil;
import com.sun.awt.AWTUtilities;
public class StartRunning {
private XMPPConnection connection;
private static String USER_IM_HOME;
//参数
public static String ARGUMENTS;
//资源文件目录
private static File RESOURCE_DIRECTORY;
//bin(二进制)文件目录
private static File BIN_DIRECTORY;
//日志文件目录
private static File LOG_DIRECTORY;
//客户端文件目录
private static File USER_DIRECTORY;
//plugin(接口)文件目录
private static File PLUGIN_DIRECTORY;
//xtra文件目录
private static File XTRA_DIRECTORY;
//config文件目录
private static File CONFIG_DIRECTORY;
//skin文件目录
private static File SKIN_DIRECTORY;
//客户端程序配置、登录配置
private Config config, loginConfig;
//登录窗口
private LoginFrame loginFrame;
public ImageIcon sysIcon = new ImageIcon(ClientConfig.IMAGE_DIR + ClientConfig.FILE_SEP + "tray"+ClientConfig.FILE_SEP+"online.png");
//正在登录窗口
private LoadingFrame loadingFrame;
//客户端主界面
private MainFrame mainFrame;
//存放界面皮肤的集合
private Map<String, Skin> skinMap;
//当前系统的皮肤和当前预览的皮肤
private Skin currentSkin, currentPreviewSkin;
//垃圾回收定时器
private Timer gcTimer;
//登录历史记录列表
private List<String> loginHistory;
//当前登录的用户
private User currentUser;
//登录界面Banner
private String bannerName;
private Roster userRoster;
private VCard vcard;
public StartRunning() {
super();
System.setProperty("java.awt.im.style", "no-spot");
//读取初始化配置
this.config = new Config(ClientConfig.CONFIG_PATH);
this.loginConfig = new Config(ClientConfig.LOGIN_CONFIG_PATH);
this.loginHistory = new ArrayList<String>(ClientConfig.MAX_HISTORY_USER_COUNT);
initDirectory();
initBannerName();
//连接服务器
ModelUtils.connServer();
connection = ModelUtils.getConnection();
if(!isRunning()) {
//DBConnectionManager.getInstance();
load();
} else {
System.exit(0);
}
}
/**
* 确保目录的存在,不存在则重新生成
*/
private void initDirectory() {
USER_IM_HOME = ClientConfig.USER_DIR + "/";
BIN_DIRECTORY = initializeDirectory("bin");
LOG_DIRECTORY = initializeDirectory("logs");
USER_DIRECTORY = initializeDirectory("users");
SKIN_DIRECTORY = initializeDirectory("skin");
CONFIG_DIRECTORY = initializeDirectory("config");
PLUGIN_DIRECTORY = initializeDirectory("plugin");
RESOURCE_DIRECTORY = initializeDirectory("resources");
XTRA_DIRECTORY = initializeDirectory("resources/xtra");
}
/**
* 跟踪用户配置目录。
*
* @return 根据操作系统的目录名。
*/
public static String getUserConf() {
if (OSUtils.isLinux()) {
return null;
} else if(OSUtils.isMacOSX()) {
return null;
} else {
return ClientConfig.USER_DIR;
}
}
/**
* 验证当前同一台机器上已经运行的客户端数量
* @return
*/
private boolean isRunning(){
String info = null;
//具体代码暂未实现
return info != null;
}
/**
* 加载系统的所有皮肤
*/
public void loadAllSkin(){
//所有皮肤的集合
skinMap = new TreeMap<String, Skin>();
Skin defaultSkin = new Skin(ClientConfig.DEFAULT_SKIN_NAME);
skinMap.put(defaultSkin.getName().toUpperCase(), defaultSkin);
File skinRoot = new File(ClientConfig.SKIN_DIR);
if (skinRoot.exists() && skinRoot.isDirectory()){
File[] skinDirs = skinRoot.listFiles();
String name, path;
File file;
int count = 0;
for (File skinDir: skinDirs){
if (skinDir.isDirectory()){
name = skinDir.getName();
path = skinDir.getPath();
file = new File(path + ClientConfig.FILE_SEP + ClientConfig.SKIN_NORMAL_FILE_NAME);
if (!file.exists() || !file.isFile()){
continue;
}
file = new File(path + ClientConfig.FILE_SEP + ClientConfig.SKIN_BLUR_FILE_NAME);
if (!file.exists() || !file.isFile()){
continue;
}
file = new File(path + ClientConfig.FILE_SEP + ClientConfig.SKIN_PREVIEW_FILE_NAME);
if (!file.exists() || !file.isFile()){
continue;
}
skinMap.put(name.toUpperCase(), new Skin(name));
count++;
if (count >= ClientConfig.MAX_SKIN_COUNT - 1){
break;
}
}
}
}
}
/**
* 更改系统皮肤
*/
public void changeSkin(Skin newSkin, boolean save){
boolean currentShow = (currentPreviewSkin == newSkin);
if((!save && currentShow) || (save && currentSkin == newSkin)){
return;
}
if(newSkin == null){
newSkin = skinMap.get(ClientConfig.DEFAULT_SKIN_NAME.toUpperCase());
}
if(!currentShow){
Image image = newSkin.getImage();
Image blurImage = newSkin.getBlurImage();
BufferedImage bufferedBlurImage = blurImage == null? null: UIUtil.toBufferedImage(blurImage, null);
for (Window win: Window.getWindows()){
if(win.isDisplayable()){
if(win instanceof JAFrame){
((JAFrame)win).setBackgroundImage(image, bufferedBlurImage);
} else if(win instanceof JADialog){
((JADialog)win).setBackgroundImage(image, bufferedBlurImage);
}
}
}
currentPreviewSkin = newSkin;
image = null;
blurImage = null;
}
if( save){
for (Skin skin: skinMap.values()){
skin.setSelected(skin == newSkin);
}
currentSkin = newSkin;
config.savePropertie(ClientConfig.SKIN_NAME, currentSkin.getName());
}
}
/**
* 回收垃圾内存
*/
public void startGC() {
int delay = Integer.parseInt(config.getProperty(ClientConfig.GC_PERIOD, "5000"));
//初始化定时器
gcTimer = new Timer(delay, new ActionListener(){
public void actionPerformed(ActionEvent e){
System.gc();
}
});
gcTimer.start();
}