亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? controller.java

?? 一個仿qq的程序源碼 一個用純java開發的
?? JAVA
字號:
package qianqian.p2pchat.control;

import qianqian.p2pchat.constant.Const;
import qianqian.p2pchat.filetrans.FileTransporter;
import qianqian.p2pchat.filetrans.RecvfileThread;
import qianqian.p2pchat.filetrans.SendfileThread;
import qianqian.p2pchat.gui.FindPwdForm;
import qianqian.p2pchat.gui.LoginForm;
import qianqian.p2pchat.gui.RegisterForm;
import qianqian.p2pchat.gui.SearchForm;
import qianqian.p2pchat.gui.UserRoomForm;
import qianqian.p2pchat.message.RoomMessage;
import qianqian.p2pchat.message.Message;
import qianqian.p2pchat.message.P2PMessage;
import qianqian.p2pchat.message.SystemMessage;
import qianqian.p2pchat.message.UserMessage;

public class Controller {
	private static Controller controller = null;
	private static boolean isOn = false;
	private Dispatcher dispatcher = null;
	private UdpDispatcher uDispatcher = null;
	private java.util.ArrayList<String> chatroomList = new java.util.ArrayList<String>();
	private java.util.TreeMap<Peer, P2PConversation> prep2pconvs = new java.util.TreeMap<Peer, P2PConversation>();
	private Room curRoom = null;
	private Peer me = null;
	private DispatchThread dispThread = null;
	private boolean roomFree = true;
	private String reqRoom = null;

	private Controller() throws Exception {
		dispatcher = new MultiDispatcher();
		uDispatcher = new UdpDispatcher();
		FileTransporter.getInstance();
		me = Peer.anonymous;
	}

	public static Controller getInstance() {
		try {
			if (controller == null) {
				synchronized (Controller.class) {
					if (controller == null) {
						controller = new Controller();
						isOn = true;
					}
				}
			}
		} catch (Exception ex) {
			isOn = false;
		}
		return controller;
	}

	public static boolean isOn() {
		return isOn;
	}

	public Dispatcher getDispatcher() {
		return dispatcher;
	}

	public Dispatcher getUdpDispatcher() {
		return uDispatcher;
	}

	public boolean setNickName(String iNick, char iGender) {
		me = new Peer(iNick, iGender);
		me.setStatus(Const.STATUS_ASK_NICK);
		SystemMessage newMsg = new SystemMessage(Peer.anonymous,
				Const.CODE_NICK_FREE, iNick);
		getDispatcher().dispatchToAll(newMsg);
		try {
			synchronized (Const.waitForNickAck) {
				Const.waitForNickAck.wait(Const.WaitTimeOut);
			}
		} catch (InterruptedException ex) {
		}
		if (me.getStatus() == Const.STATUS_NICK_FAIL)
			return false;
		me.setStatus(Const.STATUS_AUTH);
		return true;
	}

	public void quit() {
		// 廣播線程關閉
		if (dispThread != null) {
			dispThread.interrupt();
			dispThread = null;
		}

		// 斷開網絡連接
		if (curRoom != null) {
			if (curRoom.getName().equals(Const.DefRoom)) {
				UserMessage msg = new UserMessage(Const.CODE_OFF_LINE, getMe());
				getUdpDispatcher().dispatchToServer(msg, Const.UdpIp);

			} else {
				SystemMessage msg = new SystemMessage(getMe(),
						Const.CODE_LEFT_ROOM, curRoom.getName());
				getDispatcher().dispatchToAll(msg);
			}
		}

		// 關閉廣播套接字
		getUdpDispatcher().closeDispatcher();
		getDispatcher().closeDispatcher();

		// 關閉文件傳輸套接字
		SendfileThread.forceOff();
		RecvfileThread.forceOff();
		FileTransporter.getInstance().closeTransporter();

		// 關閉所以聊天窗口
		java.util.Iterator<P2PConversation> iter = prep2pconvs.values()
				.iterator();
		while (iter.hasNext()) {
			iter.next().exit();
		}

		// 關閉控制器
		controller = null;
		isOn = false;
		System.exit(0);
	}

	public boolean isRoomFree(String iRoomName) {
		roomFree = true;
		SystemMessage newMsg = new SystemMessage(getMe(), Const.CODE_ROOM_FREE,
				iRoomName);
		getDispatcher().dispatchToAll(newMsg);
		try {
			synchronized (Const.waitForRoomAck) {
				Const.waitForRoomAck.wait(Const.WaitTimeOut);
			}
		} catch (InterruptedException ex) {
		}
		return roomFree;
	}

	public String[] getAvailRooms() {
		String[] outArr = new String[chatroomList.size()];
		chatroomList.toArray(outArr);
		return outArr;
	}

	public boolean containsRoom(String room) {
		return chatroomList.contains(room);
	}

	public void setAndMultiCastRoom(Room iRoom) {
		curRoom = iRoom;
		curRoom.addPeer(getMe());
		reqRoom = null;
		SystemMessage advMsg = new SystemMessage(controller.getMe(),
				Const.CODE_ROOM_DISP, iRoom.getName());
		getDispatcher().dispatchToAll(advMsg);

		if (dispThread != null) {
			dispThread.interrupt();
			dispThread = null;
		}
		dispThread = new DispatchThread(curRoom);
		dispThread.start();
	}

	public void sendRoomMessage(String iMsg) {
		if (curRoom == null)
			return;
		RoomMessage newMsg = new RoomMessage(iMsg, getMe(), curRoom);
		getDispatcher().dispatchToAll(newMsg);

	}

	public Room getCurrentRoom() {
		return curRoom;
	}

	public boolean hasJoined() {
		return curRoom != null;
	}

	public void sendP2PMsg(Peer iTo, char code, String iMsg) {
		P2PMessage newMsg = new P2PMessage(code, iMsg, getMe(), iTo);
		getDispatcher().dispatchToAll(newMsg);
	}

	public void sendImage(Peer iTo, char code, byte[] imgByte, int len,
			String type, String iMsg) {
		P2PMessage newMsg = new P2PMessage(code, iMsg, imgByte, len, type,
				getMe(), iTo);
		getDispatcher().dispatchToAll(newMsg);
	}

	public void sendFace(Peer to, char code, String info, String face) {
		P2PMessage newMsg = new P2PMessage(code, info, face, getMe(), to);
		getDispatcher().dispatchToAll(newMsg);
	}

	public P2PConversation startP2PConversation(Peer iTo) {
		if (iTo == null) {
			return null;
		}
		P2PConversation convs = null;
		if (prep2pconvs.containsKey(iTo)) {
			convs = prep2pconvs.get(iTo);
		} else {
			convs = new P2PConversation(iTo);
			prep2pconvs.put(iTo, convs);
		}
		return convs;
	}

	public void parseMessage(Message iMsg, String ip) {
		if (iMsg == null)
			return;
		if (iMsg instanceof SystemMessage)// 系統消息解析
			parseSystemMessage((SystemMessage) iMsg);
		else if (iMsg instanceof RoomMessage)// 聊天室消息解析
			parseChatRoomMessage((RoomMessage) iMsg);
		else if (iMsg instanceof P2PMessage)// P2P消息解析
			parseP2PMessage((P2PMessage) iMsg, ip);
		else if (iMsg instanceof UserMessage)
			parseUserMessage((UserMessage) iMsg);
		else
			System.out.println("bad message...");
	}

	public void parseUserMessage(UserMessage iMsg) {
		char code = iMsg.getCode();
		switch (code) {
		case Const.CODE_LOGIN_FAIL:
			synchronized (Const.waitForLoginAck) {
				Const.waitForLoginAck.notify();
			}
			break;
		case Const.CODE_LOGIN_SUCCESS:
			me = iMsg.getFrom();
			curRoom = new Room(me);
			synchronized (Const.waitForLoginAck) {
				Const.waitForLoginAck.notify();
			}
			break;
		case Const.CODE_FORCE_PART:
			javax.swing.JOptionPane.showMessageDialog(null, "您的賬號在別處登錄,強迫下線!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			UserRoomForm.getInstance(me).dispose();
			break;
		case Const.CODE_REGIST_FAIL:
			synchronized (Const.waitForRegistAck) {
				Const.waitForRegistAck.notify();
			}
			break;
		case Const.CODE_REGIST_SUCCESS:
			RegisterForm.getInstance(null).addNew(iMsg.getFrom());
			synchronized (Const.waitForRegistAck) {
				Const.waitForRegistAck.notify();
			}
			break;
		case Const.CODE_SEARCH_RESULT:
			SearchForm.getInstance(curRoom.getRoomForm()).addResult(
					iMsg.getFrom().getFriends());
			synchronized (Const.waitForSearchAck) {
				Const.waitForSearchAck.notify();
			}
			break;
		case Const.CODE_ADD_FRIEND:
			UserRoomForm.getInstance(me).newFrndMsg(iMsg.getFrom());
			break;
		case Const.CODE_FRIEND_INFO:
			UserRoomForm.getInstance(me).addFriend(iMsg.getFrom());
			break;
		case Const.CODE_DELETE_SUCCESS:
			javax.swing.JOptionPane.showMessageDialog(null, "成功刪除好友!", "提示",
					javax.swing.JOptionPane.INFORMATION_MESSAGE);
			UserRoomForm.getInstance(me).delFriend(iMsg.getInfo());
			break;
		case Const.CODE_MODIFY_SUCCESS:
			javax.swing.JOptionPane.showMessageDialog(null, "服務器已經接受了您的新資料!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			me.setName(iMsg.getInfo());
			me.setGender(iMsg.getFrom().getGender());
			UserRoomForm.getInstance(me).setTitle(
					iMsg.getInfo() + "[" + me.getUserId() + "]");
			break;
		case Const.CODE_MODIFY_FAIL:
			javax.swing.JOptionPane.showMessageDialog(null, "更新資料失敗!", "提示",
					javax.swing.JOptionPane.INFORMATION_MESSAGE);
			break;
		case Const.CODE_FIND_RESP:
			FindPwdForm.getInstance(LoginForm.getInstance()).response();
			break;
		}
	}

	public Peer getMe() {
		return me;
	}

	public java.util.TreeMap<Peer, P2PConversation> getP2PConvs() {
		return prep2pconvs;
	}

	private void parseP2PMessage(P2PMessage iMsg, String ip) {
		if (!getMe().equals(iMsg.getTo()))
			return;

		Peer peer = iMsg.getSender();
		if (prep2pconvs.get(peer) != null && prep2pconvs.get(peer).isShutUp())
			return;

		P2PConversation p2pConvs = startP2PConversation(peer);
		p2pConvs.show();
		p2pConvs.msgArrival(iMsg, ip);
	}

	private void parseChatRoomMessage(RoomMessage iMsg) {
		if (iMsg.getRoom() == null || !curRoom.equals(iMsg.getRoom()))
			return;
		curRoom.msgRecved(iMsg);
	}

	private void parseSystemMessage(SystemMessage iMsg) {
		if (!iMsg.isBroadcast() && !iMsg.getToPeer().equals(getMe()))
			return;
		switch (iMsg.getCode()) {
		case Const.CODE_ROOM_DISP:
			if (!chatroomList.contains(iMsg.getArgument()))
				chatroomList.add(iMsg.getArgument());
			return;
		case Const.CODE_JOIN_ROOM:
			if (curRoom == null) {
				reqRoom = iMsg.getArgument();
				return;
			} else {
				if (!iMsg.getArgument().equals(curRoom.getName())) {
					return;
				}
				curRoom.tellJoin(iMsg.getSender());
				SystemMessage newMsg = new SystemMessage(getMe(),
						Const.CODE_HELLO_JOIN, curRoom.getName());
				getDispatcher().dispatchToAll(newMsg);
				if (getMe().equals(curRoom.getAdmin())) {
					newMsg = new SystemMessage(getMe(), Const.CODE_ROOM_ADMIN,
							curRoom.getName());
					getDispatcher().dispatchToAll(newMsg);
				}
				return;
			}
		case Const.CODE_HELLO_JOIN:
			if (curRoom == null && reqRoom != null
					&& reqRoom.equals(iMsg.getArgument())) {
				Room room = new Room(iMsg.getArgument());
				setAndMultiCastRoom(room);
				synchronized (Const.waitForJoinAck) {
					Const.waitForJoinAck.notify();
				}
			} else if (curRoom == null && reqRoom == null)
				return;
			if (!iMsg.getArgument().equals(curRoom.getName()))
				return;
			curRoom.addPeer(iMsg.getSender());
			return;
		case Const.CODE_LEFT_ROOM:
			if (curRoom == null)
				return;
			if (!iMsg.getArgument().equals(curRoom.getName()))
				return;
			curRoom.left(iMsg.getSender());
			return;
		case Const.CODE_ROOM_ADMIN:
			if (curRoom == null)
				return;
			if (!iMsg.getArgument().equals(curRoom.getName()))
				return;
			curRoom.setAdmin(iMsg.getSender());
			return;
		case Const.CODE_NICK_FREE:
			if (getMe().getName().equals(iMsg.getArgument())
					&& getMe().getStatus() == Const.STATUS_AUTH) {
				SystemMessage newMsg = new SystemMessage(getMe(),
						Const.CODE_NICK_TAKEN, getMe().getName());
				getDispatcher().dispatchToAll(newMsg);
			}
			return;
		case Const.CODE_ROOM_FREE:
			if (Room.getByName(iMsg.getArgument()) != null
					&& curRoom.getName().equals(iMsg.getArgument())) {
				SystemMessage newMsg = new SystemMessage(getMe(),
						Const.CODE_ROOM_TAKEN, iMsg.getArgument());
				getDispatcher().dispatchToAll(newMsg);
			}
			return;
		case Const.CODE_ROOM_TAKEN:
			if (roomFree && reqRoom.equals(iMsg.getArgument())) {
				roomFree = false;
				try {
					synchronized (Const.waitForNickAck) {
						Const.waitForRoomAck.notify();
					}
				} catch (Exception e) {
				}
			}
			return;
		case Const.CODE_NICK_TAKEN:
			if (getMe().getStatus() != Const.STATUS_ASK_NICK)
				return;
			getMe().setStatus(Const.STATUS_NICK_FAIL);
			try {
				synchronized (Const.waitForNickAck) {
					Const.waitForNickAck.notify();
				}
			} catch (Exception e) {
			}
			return;
		}
	}

	public void setReqRoom(String iRoom) {
		reqRoom = iRoom;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91老司机福利 在线| 奇米影视在线99精品| 亚洲国产成人tv| 狠狠色丁香九九婷婷综合五月 | 国产精品久久久久婷婷| 亚洲一区二区三区激情| 99综合电影在线视频| 精品国产不卡一区二区三区| 夜夜精品浪潮av一区二区三区| 高清不卡一区二区| 精品久久人人做人人爽| 视频在线观看一区| 色婷婷激情久久| 中文字幕一区在线| 国产成人免费视频网站高清观看视频 | 在线观看日韩av先锋影音电影院| 久久精品人人爽人人爽| 麻豆成人91精品二区三区| 精品婷婷伊人一区三区三| 亚洲日穴在线视频| av高清不卡在线| 国产日韩欧美不卡| 国产高清一区日本| 国产喂奶挤奶一区二区三区| 国产一区福利在线| 精品日韩一区二区三区 | 欧美一区二区在线免费观看| 一区二区三区免费看视频| 成人激情黄色小说| 国产精品夫妻自拍| 波多野结衣在线aⅴ中文字幕不卡| 久久色.com| 国产黑丝在线一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 狠狠色综合播放一区二区| 亚洲精品一线二线三线无人区| 狠狠色丁香婷婷综合久久片| 久久久久久久久久电影| 成人动漫在线一区| 亚洲美女免费在线| 欧美日韩中文另类| 麻豆成人在线观看| 国产视频不卡一区| 91麻豆免费看片| 亚洲成av人片观看| 欧美不卡激情三级在线观看| 国精产品一区一区三区mba桃花 | 亚洲国产精品一区二区www| 欧美无砖砖区免费| 青青草国产成人av片免费| 日韩精品中文字幕在线不卡尤物| 加勒比av一区二区| 国产精品蜜臀在线观看| 欧美性猛交一区二区三区精品| 日本亚洲最大的色成网站www| 亚洲精品一区二区三区四区高清| 成人激情校园春色| 午夜精品福利久久久| 精品国产91乱码一区二区三区 | 亚洲欧美视频在线观看视频| 欧洲在线/亚洲| 精品一区二区三区免费毛片爱| 欧美激情中文字幕一区二区| 欧美伊人久久大香线蕉综合69| 精品一区二区三区在线播放| 综合久久久久综合| 亚洲色图视频网| 欧美一区2区视频在线观看| 成人午夜激情影院| 亚洲午夜av在线| 欧美国产综合一区二区| 欧美高清视频www夜色资源网| 国产激情一区二区三区桃花岛亚洲| 一区二区在线观看免费| 精品国产99国产精品| 在线看不卡av| 北条麻妃一区二区三区| 免费在线视频一区| 亚洲精品国产第一综合99久久| 精品不卡在线视频| 91黄色免费观看| 国产成人欧美日韩在线电影| 日韩成人精品在线| 一区二区久久久| 国产精品久久国产精麻豆99网站| 欧美一区二区在线观看| 在线视频亚洲一区| 波多野结衣欧美| 国产精品一区三区| 蜜桃久久av一区| 亚洲大片一区二区三区| 国产精品久久久久久久久搜平片| 欧美成人精品二区三区99精品| 在线免费观看视频一区| 99久久国产免费看| 成人黄色国产精品网站大全在线免费观看 | 3751色影院一区二区三区| 91丨九色丨蝌蚪丨老版| 国产凹凸在线观看一区二区| 久久国产精品第一页| 蜜臀久久99精品久久久久久9| 亚洲成人动漫在线观看| 亚洲免费在线电影| 亚洲美女精品一区| 亚洲视频 欧洲视频| 国产精品久久精品日日| 美洲天堂一区二卡三卡四卡视频 | 欧美性感一类影片在线播放| a级精品国产片在线观看| 成人理论电影网| av在线不卡免费看| 97精品久久久午夜一区二区三区| 国产精品1区二区.| 成人成人成人在线视频| av不卡在线观看| 91久久精品一区二区三| 在线看不卡av| 欧美一区二区视频在线观看2022| 91精品国产美女浴室洗澡无遮挡| 欧美一区二区福利在线| 欧美成人高清电影在线| 久久久久久黄色| 亚洲国产精品精华液2区45| 亚洲欧洲成人av每日更新| 亚洲色图另类专区| 视频一区二区不卡| 狠狠色丁香婷婷综合| 国产成人精品免费视频网站| 99久久国产综合精品色伊| 欧美在线不卡视频| 日韩丝袜情趣美女图片| 久久久久久久一区| 1区2区3区精品视频| 午夜亚洲国产au精品一区二区| 玖玖九九国产精品| 丁香另类激情小说| 欧美午夜精品久久久久久孕妇| 3d成人h动漫网站入口| 久久婷婷综合激情| 一区二区三区蜜桃| 精品伊人久久久久7777人| 国产成人免费在线视频| 91国产视频在线观看| 337p亚洲精品色噜噜狠狠| 日本一区二区在线不卡| 亚洲午夜久久久久久久久电影网| 捆绑变态av一区二区三区| eeuss影院一区二区三区| 欧美乱妇15p| 国产精品免费免费| 久久精品国产亚洲a| 色综合久久中文综合久久97| 日韩视频永久免费| 亚洲男人天堂一区| 国产福利不卡视频| 精品1区2区3区| 久久精品国产精品亚洲红杏| 成人高清免费在线播放| 欧美一区二区三区视频| 中文字幕色av一区二区三区| 日本美女视频一区二区| 99久久久无码国产精品| 久久尤物电影视频在线观看| 亚洲曰韩产成在线| eeuss鲁一区二区三区| 日韩欧美一二三四区| 亚洲精品国产视频| 成人晚上爱看视频| 欧美大黄免费观看| 亚洲丶国产丶欧美一区二区三区| 成人av在线资源网站| 精品国产一区二区三区不卡| 天堂va蜜桃一区二区三区漫画版| 99久久er热在这里只有精品15| 久久婷婷色综合| 久久se精品一区二区| 欧美久久高跟鞋激| 亚洲无线码一区二区三区| 99精品一区二区三区| 国产欧美日韩不卡| 国产精一品亚洲二区在线视频| 欧美一区二区精美| 日韩黄色免费网站| 欧美日韩三级在线| 亚洲综合在线第一页| 在线这里只有精品| 18成人在线视频| 91欧美激情一区二区三区成人| 久久精品日韩一区二区三区| 久久99精品久久久久久国产越南 | 欧美在线视频日韩| 亚洲黄一区二区三区| 91免费精品国自产拍在线不卡| 国产日本欧洲亚洲| 成人免费看片app下载| 亚洲国产成人私人影院tom | 蜜臂av日日欢夜夜爽一区| 91精品国产综合久久福利软件| 亚洲成av人片| 欧美一区二区人人喊爽|