⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controller.java

📁 一个仿qq的程序源码 一个用纯java开发的
💻 JAVA
字号:
package qianqian.p2pchat.control;

import qianqian.gui.Server;
import qianqian.p2pchat.constant.Const;
import qianqian.p2pchat.message.UserMessage;
import qianqian.pooledb.DBManager;
import qianqian.pooledb.PooledCon;
import java.sql.Connection;
import java.net.InetAddress;

public class Controller {
	private static Controller controller = null;
	private static UdpDispatcher dispatcher = null;

	private Controller() {
		try {
			dispatcher = new UdpDispatcher();
		} catch (java.net.SocketException e) {
			javax.swing.JOptionPane.showMessageDialog(null, "UDP端口绑定失败!", "提示",
					javax.swing.JOptionPane.INFORMATION_MESSAGE);
			System.exit(0);
		}
	}

	public static Controller getInstance() {
		if (controller == null) {
			synchronized (Controller.class) {
				if (controller == null)
					controller = new Controller();
			}
		}
		return controller;
	}

	public UdpDispatcher getDispatcher() {
		return dispatcher;
	}

	public void quit() throws Exception {
		PooledCon.getInstance().closePool();
		getDispatcher().closeDispatcher();
	}

	public void parseMessage(final UserMessage iMsg, final InetAddress iAddr) {
		char code = iMsg.getCode();
		switch (code) {
		// 用户登录
		case Const.CODE_USER_LOGIN:
			Server.getInstance()
					.setLog("UDP:", iAddr.getHostAddress(), "Login");
			dealLogin(iMsg, iAddr);
			return;
			// 用户注册
		case Const.CODE_USER_REGIST:
			Server.getInstance().setLog("UDP:", iAddr.getHostAddress(),
					"Register");
			dealRegist(iMsg, iAddr);
			return;
			// 用户更新
		case Const.CODE_USER_MODIFY:
			Server.getInstance().setLog("UDP:", iAddr.getHostAddress(),
					"Modify");
			dealModify(iMsg, iAddr);
			return;
			// 查找用户
		case Const.CODE_SEARCH_FRIEND:
			Server.getInstance().setLog("UDP:", iAddr.getHostAddress(),
					"Search");
			dealSearch(iMsg, iAddr);
			return;
			// 添加好友
		case Const.CODE_ADD_FRIEND:
			Server.getInstance().setLog("UDP:", iAddr.getHostAddress(), "Add");
			dealAddFrnd(iMsg, iAddr);
			return;
			// 删除好友
		case Const.CODE_DELETE_FRIEND:
			Server.getInstance().setLog("UDP:", iAddr.getHostAddress(),
					"Delete");
			dealDelFrnd(iMsg, iAddr);
			return;
			// 用户下线
		case Const.CODE_OFF_LINE:
			Server.getInstance().setLog("UDP:", iAddr.getHostAddress(),
					"Logout");
			dealOffLine(iMsg, iAddr);
			return;
			// 找回密码
		case Const.CODE_FIND_PASSWD:
			Server.getInstance().setLog("UDP:", iAddr.getHostAddress(),
					"Passwd");
			dealFindPwd(iMsg, iAddr);
			return;
		}
	}

	private void dealLogin(final UserMessage iMsg, final InetAddress iAddr) {
		new Thread(new Runnable() {
			public void run() {
				Peer peer = checkLogin(iMsg.getFrom(), iAddr.getHostAddress());
				if (peer != null) {
					iMsg.setFrom(peer);
					if (peer.getUserIp() != null) {
						iMsg.setCode(Const.CODE_FORCE_PART);
						try {
							Controller.getInstance().getDispatcher()
									.dispatchToClient(
											iMsg,
											InetAddress.getByName(peer
													.getUserIp()));
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
					iMsg.setCode(Const.CODE_LOGIN_SUCCESS);
					Controller.getInstance().getDispatcher().dispatchToClient(
							iMsg, iAddr);
				} else {
					iMsg.setCode(Const.CODE_LOGIN_FAIL);
					Controller.getInstance().getDispatcher().dispatchToClient(
							iMsg, iAddr);
				}
			}

			private Peer checkLogin(Peer peer, String ip) {
				try {
					Connection con = PooledCon.getInstance().getCon();
					peer = DBManager.checkLogin(con, peer.getUserId(), peer
							.getPassWord(), ip);
					if (peer == null) {
						PooledCon.getInstance().releaseCon(con);
						return null;
					}
					peer
							.setFriends(DBManager.getFriends(con, peer
									.getUserId()));
					PooledCon.getInstance().releaseCon(con);
				} catch (Exception e) {
					e.printStackTrace();
				}
				return peer;
			}
		}).start();
	}

	private void dealRegist(final UserMessage iMsg, final InetAddress iAddr) {
		new Thread(new Runnable() {
			public void run() {
				Peer peer = checkRegist(iMsg.getFrom());
				if (peer != null) {
					iMsg.setCode(Const.CODE_REGIST_SUCCESS);
					iMsg.setFrom(peer);
					Controller.getInstance().getDispatcher().dispatchToClient(
							iMsg, iAddr);
				} else {
					iMsg.setCode(Const.CODE_REGIST_FAIL);
					Controller.getInstance().getDispatcher().dispatchToClient(
							iMsg, iAddr);
				}
			}

			private Peer checkRegist(Peer peer) {
				String id = null;
				if (peer.getName().isEmpty() || peer.getPassWord().isEmpty()
						|| peer.getEmail().isEmpty())
					return null;
				try {
					Connection con = PooledCon.getInstance().getCon();
					id = DBManager.addNewUser(con, peer.getPassWord(), peer
							.getName(), peer.getEmail(), peer.getGender());
					PooledCon.getInstance().releaseCon(con);
				} catch (Exception e) {
					e.printStackTrace();
					return null;
				}
				if (id == null)
					return null;
				peer = new Peer(id, peer.getName(), peer.getGender(), peer
						.getEmail(), null);
				return peer;
			}
		}).start();
	}

	private void dealSearch(final UserMessage iMsg, final InetAddress iAddr) {
		new Thread(new Runnable() {
			public void run() {
				if (checkSearch(iMsg.getFrom())) {
					iMsg.setCode(Const.CODE_SEARCH_RESULT);
					Controller.getInstance().getDispatcher().dispatchToClient(
							iMsg, iAddr);
				}
			}

			private boolean checkSearch(Peer info) {
				if (!info.getUserId().isEmpty()
						|| !info.getPassWord().isEmpty()) {
					try {
						Connection con = PooledCon.getInstance().getCon();
						info.setFriends(DBManager.searchUser(con, info
								.getUserId(), info.getPassWord()));
						PooledCon.getInstance().releaseCon(con);
					} catch (Exception e) {
						e.printStackTrace();
						return false;
					}
					return true;
				}
				return false;
			}
		}).start();
	}

	public void dealAddFrnd(final UserMessage iMsg, final InetAddress iAddr) {
		new Thread(new Runnable() {
			public void run() {
				Peer peer = iMsg.getFrom();// me,frndId
				if (checkAddFrnd(iMsg, peer.getUserId())) {
					iMsg.setCode(Const.CODE_FRIEND_INFO);
					Controller.getInstance().getDispatcher().dispatchToClient(
							iMsg, iAddr);
				}
				if (iMsg.getFrom() != null
						&& iMsg.getFrom().getUserIp() != null) {// 好友在线
					iMsg.setCode(Const.CODE_ADD_FRIEND);
					iMsg.setFrom(peer);
					InetAddress iAddr = null;
					try {
						iAddr = InetAddress.getByName(iMsg.getFrom()
								.getUserIp());
					} catch (Exception e) {
						e.printStackTrace();
						return;
					}
					Controller.getInstance().getDispatcher().dispatchToClient(
							iMsg, iAddr);
				}
			}

			private boolean checkAddFrnd(UserMessage iMsg, String userId) {
				Peer peer = null;
				String frndId = iMsg.getInfo();
				if (userId.isEmpty() || frndId.isEmpty()) {
					iMsg.setFrom(null);
					return false;
				}
				try {
					java.sql.Connection con = PooledCon.getInstance().getCon();
					if (DBManager.checkFriend(con, userId, frndId)) {
						PooledCon.getInstance().releaseCon(con);
						iMsg.setFrom(null);
						return false;
					}
					DBManager.addNewFrnd(con, userId, frndId);
					if (!DBManager.checkFriend(con, frndId, userId)) {
						peer = DBManager.searchUser(con, frndId, "").getFirst();
					}
					PooledCon.getInstance().releaseCon(con);
				} catch (Exception e) {
					e.printStackTrace();
					iMsg.setFrom(null);
					return false;
				}
				iMsg.setFrom(peer);
				return true;
			}
		}).start();
	}

	private void dealModify(final UserMessage iMsg, final InetAddress iAddr) {
		Peer peer = iMsg.getFrom();
		try {
			Connection con = PooledCon.getInstance().getCon();
			boolean rst = DBManager.modifyUser(con, peer.getUserId(), iMsg
					.getInfo(), peer.getName(), peer.getPassWord(), peer
					.getGender(), peer.getEmail());
			if (rst) {
				iMsg.setCode(Const.CODE_MODIFY_SUCCESS);
				iMsg.setInfo(peer.getName());
				Controller.getInstance().getDispatcher().dispatchToClient(iMsg,
						iAddr);
			} else {
				iMsg.setCode(Const.CODE_MODIFY_FAIL);
				Controller.getInstance().getDispatcher().dispatchToClient(iMsg,
						iAddr);
			}
			PooledCon.getInstance().releaseCon(con);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void dealDelFrnd(final UserMessage iMsg, final InetAddress iAddr) {
		String userId = iMsg.getFrom().getUserId();
		String frndId = iMsg.getInfo();
		try {
			Connection con = PooledCon.getInstance().getCon();
			DBManager.delFriend(con, userId, frndId);
			PooledCon.getInstance().releaseCon(con);
		} catch (Exception e) {
			e.printStackTrace();
			return;
		}
		iMsg.setCode(Const.CODE_DELETE_SUCCESS);
		iMsg.setInfo(frndId);
		Controller.getInstance().getDispatcher().dispatchToClient(iMsg, iAddr);
	}

	private void dealOffLine(final UserMessage iMsg, final InetAddress iAddr) {
		new Thread(new Runnable() {
			public void run() {
				try {
					String ip = iAddr.getHostAddress();
					Connection con = PooledCon.getInstance().getCon();
					DBManager.offLine(con, iMsg.getFrom().getUserId(), ip);
					PooledCon.getInstance().releaseCon(con);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}).start();
	}

	private void dealFindPwd(final UserMessage iMsg, final InetAddress iAddr) {
		new Thread(new Runnable() {
			public void run() {
				try {
					Connection con = PooledCon.getInstance().getCon();
					String passwd = System.currentTimeMillis() + "";
					if (DBManager.findPasswd(con, iMsg.getFrom().getUserId(),
							passwd, iMsg.getInfo())) {
						if (sendEmail(iMsg.getInfo(), passwd)) {
							iMsg.setCode(Const.CODE_FIND_RESP);
							Controller.getInstance().getDispatcher()
									.dispatchToClient(iMsg, iAddr);
						}
					}
					PooledCon.getInstance().releaseCon(con);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

			private boolean sendEmail(final String email, final String pwd) {
				try {
					new Sender().send(email, pwd);
				} catch (Exception e) {
					return false;
				}
				return true;
			}
		}).start();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -