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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mainapplicationwindow.java

?? 可以實現(xiàn)P2P聊天通信
?? JAVA
字號:
package jxtamessenger;

import java.io.IOException;
import java.net.DatagramPacket;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Logger;

import jxtamessenger.bean.OnlineMessage;
import jxtamessenger.service.JxtaMulticastSocketService;
import jxtamessenger.service.JxtaServerSocketService;
import jxtamessenger.service.Service;
import jxtamessenger.util.ThreadPoolUtil;
import jxtamessenger.xml.XmlCreator;
import net.jxta.peergroup.PeerGroup;
import net.jxta.platform.NetworkManager;
import net.jxta.socket.JxtaMulticastSocket;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider ;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;

import com.swtdesigner.SWTResourceManager;

public class MainApplicationWindow extends ApplicationWindow {
	private static final Logger LOG = Logger.getLogger(MainApplicationWindow.class.getName());
	private TableViewer viewer;
	
	private NetworkManager manager = null;
	private PeerGroup pg = null;
	
	/** 保存當前用戶激活的窗口對象 */
	@SuppressWarnings("unchecked")
	public static ConcurrentHashMap chatwin = new ConcurrentHashMap();
	
	/**
	 * The content provider class is responsible for providing objects to the
	 * view. It can wrap existing objects in adapters or simply return objects
	 * as-is. These objects may be sensitive to the current input of the view,
	 * or ignore it and always show the same content (like Task List, for
	 * example).
	 */
	class ViewContentProvider implements IStructuredContentProvider {
		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
		}

		public void dispose() {
		}

		public Object[] getElements(Object parent) {
			return new String[] {};
		}
	}

class ViewLabelProvider extends LabelProvider implements ITableLabelProvider  {
		public String getColumnText(Object obj, int index) {
			return ((OnlineMessage)obj).getUserName();
		}

		public Image getColumnImage(Object obj, int index) {
			return getImage(obj);
		}

		public Image getImage(Object obj) {
			return SWTResourceManager.getImage(this.getClass(), "online.ico");
		}
	}

	/**
	 * Create the application window
	 */
	public MainApplicationWindow() {
		super(null);

		try {
        	// TODO: Currently use EDGE mode configuration
        	manager = new NetworkManager(NetworkManager.ConfigMode.EDGE, "JxtaMessenger");
            manager.startNetwork();
            
            // Here directly use NetPeerGroup for simplicity
            pg = manager.getNetPeerGroup();

		} catch (Exception e) {
			LOG.severe("JxtaMessenger initialize failed.");
            e.printStackTrace();
            System.exit(-1);
        }
	}

	/**
	 * Create contents of the application window
	 * @param parent
	 */
	protected Control createContents(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);
		FillLayout layout = new FillLayout();
		layout.marginWidth = 3;
		layout.marginHeight = 3;
		container.setLayout(layout);

		viewer = new TableViewer(container, SWT.SINGLE | SWT.V_SCROLL);
		viewer.setContentProvider(new ViewContentProvider());
		viewer.setLabelProvider(new ViewLabelProvider());
		viewer.setInput(new ArrayList<OnlineMessage>());

		final Action fileAction = new Action() {
			@SuppressWarnings("unchecked")
			public void run() {
			ISelection selection = viewer.getSelection();
				OnlineMessage msg = (OnlineMessage)((IStructuredSelection)selection).getFirstElement();
				showMessage("Comming soon!");
			}
		};
		fileAction.setText("文件傳輸...");
		
		final Action chatAction = new Action() {
			@SuppressWarnings("unchecked")
			public void run() {
				ISelection selection = viewer.getSelection();
				OnlineMessage msg = (OnlineMessage)((IStructuredSelection)selection).getFirstElement();
				if(chatwin.containsKey(msg.getHostName())) {
					// The chat window has already existed
    				ChatWindow chatWindow = (ChatWindow)chatwin.get(msg.getHostName());
    				chatWindow.getShell().forceActive();
				} else {
					LOG.info("Chat window is opened.");
					Window chatWindow = new ChatWindow(viewer.getControl().getShell(), pg, msg);
					chatwin.put(msg.getHostName(), chatWindow);
					chatWindow.open();
				}
			}
		};
		chatAction.setText("交談...");
		
		viewer.addDoubleClickListener(new IDoubleClickListener() {
			public void doubleClick(DoubleClickEvent event) {
				chatAction.run();
			}
		});
		final MenuManager mgr = new MenuManager("#PopupMenu");
		mgr.setRemoveAllWhenShown(true);

		mgr.addMenuListener(new IMenuListener() {
			public void menuAboutToShow(IMenuManager manager) {
				IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
				if (!selection.isEmpty()) {
					mgr.add(chatAction);
					mgr.add(fileAction);
				}
			}
		});
		viewer.getControl().setMenu(mgr.createContextMenu(viewer.getControl()));
		
        // Now UI has initialized, Start service
        startService();
        
        // Multicast online message
        mcastOnlineMessage(pg);

		return container;
	}

	/**
	 * Launch the application
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			MainApplicationWindow window = new MainApplicationWindow();
			window.setBlockOnOpen(true);
			window.open();
			Display.getCurrent().dispose();
	} catch (Exception e){
			e.printStackTrace();
		}
		
		// TODO: Must call this so the program can terminated gracefully, why?
		// Some jxta none-daemon threads can not terminate, why?
		System.exit(0);
	}

	/**
	 * Configure the shell
	 * @param newShell
	 */
	protected void configureShell(final Shell newShell) {
		super.configureShell(newShell);
		newShell.setText("JxtaMessenger");
		newShell.setImage(SWTResourceManager.getImage(this.getClass(), "blue.ico"));
//	TODO: System tray
		final Tray tray = newShell.getDisplay().getSystemTray();
		if (tray == null) {
			LOG.severe("The system tray is not available");
			System.exit(-1);
		} else {
			final TrayItem item = new TrayItem(tray, SWT.NONE);
			item.setToolTipText("JxtaMessenger");
			item.addListener(SWT.DefaultSelection, new Listener() {
				public void handleEvent(Event event) {
					if(!newShell.isVisible()) {
						newShell.setVisible(true);
					}
					if(newShell.getMinimized()) {
						newShell.setMinimized(false);
					}
					newShell.forceActive();
				}
			});
			final Menu menu = new Menu(newShell, SWT.POP_UP);
			
			// About
			MenuItem mi = new MenuItem(menu, SWT.PUSH);
			mi.setText("About...");
			mi.addListener(SWT.Selection, new Listener() {
				public void handleEvent(Event event) {
					int style = SWT.APPLICATION_MODAL | SWT.YES;
					MessageBox messageBox = new MessageBox (newShell, style);
					messageBox.setText ("關(guān)于本軟件...");
					messageBox.setMessage ("email:cuizhenfu@gmail.com\nmsn:cuizhf3000@hotmail.com");
					messageBox.open ();
				}
			});
			
			// separator
			mi = new MenuItem(menu, SWT.SEPARATOR);
			
			// Exit
			mi = new MenuItem(menu, SWT.PUSH);
			mi.setText("Exit");
			mi.addListener(SWT.Selection, new Listener() {
				public void handleEvent(Event event) {
					// 關(guān)閉應(yīng)用程序
					close();
				}
			});
			menu.setDefaultItem(mi);
			
			item.addListener(SWT.MenuDetect, new Listener() {
				public void handleEvent(Event event) {
					menu.setVisible(true);
				}
			});
			item.setImage(SWTResourceManager.getImage(this.getClass(), "online.ico"));
		}
	}

	/**
	 * Return the initial size of the window
	 */
	protected Point getInitialSize() {
		return new Point(275, 400);
	}

	@SuppressWarnings("unchecked")
	public boolean close() {
		LOG.info("MainApplicationWindow close");
		if(!chatwin.isEmpty()) {
			Enumeration enumeration = chatwin.elements();
			if(enumeration.hasMoreElements()) {
				ChatWindow chatWindow = (ChatWindow)enumeration.nextElement();
				chatWindow.close();
			}
		}
		mcastOfflineMessage(pg);
		stopService();
		manager.stopNetwork();
		SWTResourceManager.dispose();
		return super.close();
	}
	
	// service array
	private Service[] service;
	private ExecutorService serviceExecutor;
	private void startService() {
		service = new Service[] {
				new JxtaMulticastSocketService(pg, viewer),
				new JxtaServerSocketService(pg, viewer)
		};
		
		serviceExecutor = Executors.newFixedThreadPool(service.length);
		
		for(int i=0; i<service.length; i++)
			serviceExecutor.execute(service[i]);
	}
	
	private void stopService() {
		for(int i=0; i<service.length; i++)
			service[i].shutdownAndAwaitTermination();
		
		ThreadPoolUtil.shutdownAndAwaitTermination(serviceExecutor);
	}
	
	/**
	 * Multicast online message
	 */
	private void mcastOnlineMessage(PeerGroup pg) {
		try {
			JxtaMulticastSocket mcastSocket = new JxtaMulticastSocket(pg, JxtaMulticastSocketService.getSocketAdvertisement(pg));
			String msg = XmlCreator.createOnlineMessage();
			
	        DatagramPacket packet = new DatagramPacket(msg.getBytes(), msg.length());
	        mcastSocket.send(packet);
	        mcastSocket.close();
		} catch (IOException e) {
			LOG.warning("multicast peer node message failed");
			e.printStackTrace();
		}
	}
	
	/**
	 * Multicast offline message
	 */
	private void mcastOfflineMessage(PeerGroup pg) {
		try {
			JxtaMulticastSocket mcastSocket = new JxtaMulticastSocket(pg, JxtaMulticastSocketService.getSocketAdvertisement(pg));
			String msg = XmlCreator.createOfflineMessage();
			
	        DatagramPacket packet = new DatagramPacket(msg.getBytes(), msg.length());
	        mcastSocket.send(packet);
	        mcastSocket.close();
		} catch (IOException e) {
			LOG.warning("multicast peer node message failed");
			e.printStackTrace();
		}
	}

//	@Override
	protected void handleShellCloseEvent() {
   super.handleShellCloseEvent();
		// TODO: Hide the main window, but child window hided too? 
		this.getShell().setVisible(false);
	}
	
	private void showMessage(String message) {
		MessageDialog.openInformation(
			viewer.getControl().getShell(),
			"JxtaMessenger",
			message);
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久99精品久久| 久久久久久久久久久电影| 久久精品国产99国产| 国产精品电影一区二区三区| 日韩一区二区在线观看视频| 色悠久久久久综合欧美99| 国产在线精品不卡| 午夜视频在线观看一区| 成人免费在线播放视频| 精品久久久久久亚洲综合网 | 亚洲免费三区一区二区| 欧美精品一区二区三区在线| 欧美日韩精品久久久| av激情综合网| 成人午夜电影小说| 国产一区免费电影| 热久久一区二区| 亚洲电影一级黄| 亚洲欧美另类在线| 中文字幕亚洲电影| 国产精品入口麻豆原神| 精品福利一区二区三区免费视频| 在线成人免费视频| 欧美男男青年gay1069videost| 99综合电影在线视频| 成人听书哪个软件好| 国产成人在线电影| 国产美女精品一区二区三区| 久久精品国产99国产精品| 蜜臀久久99精品久久久久久9| 午夜精彩视频在线观看不卡| 亚洲第一福利一区| 午夜成人免费视频| 亚洲成人你懂的| 亚洲午夜免费视频| 视频一区欧美精品| 日本欧美一区二区三区| 日韩电影一区二区三区| 日本不卡在线视频| 日韩高清不卡一区二区| 蜜桃视频一区二区三区| 美女爽到高潮91| 精品无人码麻豆乱码1区2区| 另类中文字幕网| 狠狠v欧美v日韩v亚洲ⅴ| 狠狠色2019综合网| 国产精品 欧美精品| 国产成人av电影| 不卡一区二区三区四区| 99久久国产免费看| 在线视频观看一区| 欧美男男青年gay1069videost| 欧美一区二区视频网站| 欧美不卡一区二区三区四区| 久久久久久久久久看片| 中文字幕一区二区在线观看| 亚洲狠狠丁香婷婷综合久久久| 亚洲成人精品在线观看| 久久精品国产一区二区三| 高清久久久久久| 色老汉一区二区三区| 欧美日韩一区二区三区四区| 91麻豆精品国产综合久久久久久| 精品国产精品一区二区夜夜嗨| 国产精品三级电影| 亚洲亚洲人成综合网络| 久久99精品久久只有精品| 成人动漫一区二区在线| 欧美日韩亚洲综合一区| 久久久久一区二区三区四区| 综合欧美亚洲日本| 蜜臀91精品一区二区三区| 国产成人a级片| 欧美唯美清纯偷拍| 国产日韩欧美激情| 亚洲福利一二三区| 高清不卡在线观看| 欧美年轻男男videosbes| 久久久精品免费网站| 亚洲一区二区在线播放相泽| 国产一区二区三区在线观看免费| 99精品欧美一区二区蜜桃免费| 在线不卡的av| 中文在线一区二区| 蜜臀av在线播放一区二区三区 | 91美女精品福利| 日韩一级成人av| 亚洲乱码国产乱码精品精的特点| 捆绑调教一区二区三区| 一本久久a久久免费精品不卡| 日韩一区二区三区电影在线观看 | 亚洲一区二区三区不卡国产欧美| 精品一区二区三区免费播放| 日本乱人伦aⅴ精品| 欧美精品一区二区三区蜜桃 | 日韩视频在线一区二区| 国产精品久久久久精k8| 精一区二区三区| 欧美日韩亚洲综合一区| 中文字幕在线不卡一区 | 久久99精品国产麻豆不卡| 91久久精品国产91性色tv| 国产视频一区在线播放| 免费观看在线色综合| 欧美三级午夜理伦三级中视频| 成人欧美一区二区三区| 久久99久久99小草精品免视看| 欧美午夜精品一区二区三区| 国产精品久久网站| 国产成人在线视频网址| 日韩久久久精品| 日日摸夜夜添夜夜添亚洲女人| 99国产欧美另类久久久精品| 亚洲国产精品成人综合| 国产精品77777| 精品国产乱子伦一区| 日本一区中文字幕| 欧美日韩国产美女| 亚洲一区二区黄色| 欧洲视频一区二区| 一区二区在线观看视频在线观看| 波多野结衣91| 国产精品入口麻豆九色| 成人午夜激情影院| 国产精品三级av| 成人综合婷婷国产精品久久| 国产亚洲精品7777| 国产成人丝袜美腿| 中文字幕第一区综合| 国产成人8x视频一区二区| 久久久亚洲欧洲日产国码αv| 久久精品国内一区二区三区| 日韩三级免费观看| 久久黄色级2电影| 久久这里只有精品视频网| 精品一区二区三区香蕉蜜桃| 精品免费一区二区三区| 韩国精品免费视频| 久久久久青草大香线综合精品| 国产精品一区久久久久| 国产欧美综合在线| 99视频精品免费视频| 亚洲精品美国一| 欧美中文字幕一二三区视频| 午夜日韩在线观看| 欧美videofree性高清杂交| 久久av老司机精品网站导航| 久久综合久久鬼色中文字| 国产成人鲁色资源国产91色综 | 国产成人一级电影| 国产精品国产三级国产aⅴ无密码| 99精品视频免费在线观看| 亚洲一区二区三区四区的| 欧美日韩三级一区二区| 琪琪一区二区三区| 国产人久久人人人人爽| 91在线观看高清| 日韩和的一区二区| 欧美不卡视频一区| 六月丁香婷婷久久| 岛国精品一区二区| 中文字幕在线不卡一区| 色婷婷综合视频在线观看| 午夜私人影院久久久久| 精品国产乱码久久久久久1区2区| 成人激情黄色小说| 亚洲国产精品人人做人人爽| 日韩欧美中文一区二区| 成人app在线| 石原莉奈在线亚洲二区| 日本一区免费视频| 欧美日本在线视频| 国产91精品入口| 性感美女久久精品| 久久精品亚洲乱码伦伦中文| 在线观看一区日韩| 色综合久久久久网| 蜜桃久久久久久久| 中文字幕亚洲一区二区av在线| 91精品国产综合久久香蕉的特点| 国产成人免费在线| 日韩中文字幕1| 中文字幕第一区二区| 正在播放亚洲一区| 97久久超碰精品国产| 久久国产乱子精品免费女| 亚洲精品中文字幕在线观看| 精品国产伦一区二区三区观看方式| 色婷婷综合五月| 国产成人亚洲精品狼色在线| 三级成人在线视频| 亚洲欧洲无码一区二区三区| 日韩精品一区二区三区在线| 色久综合一二码| 国产精品综合av一区二区国产馆| 亚州成人在线电影| 亚洲精品水蜜桃| 国产精品网站在线观看| 精品国产污污免费网站入口| 欧美精品精品一区|