📄 unicastdialogmanager.java
字号:
/** Copyright (c) 2001 Sun Microsystems, Inc. All rights* reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** 1. Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** 2. Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following discalimer in* the documentation and/or other materials provided with the* distribution.** 3. The end-user documentation included with the redistribution,* if any, must include the following acknowledgment:* "This product includes software developed by the* Sun Microsystems, Inc. for getdiaProject JXTA."* Alternately, this acknowledgment may appear in the software itself,* if and wherever such third-party acknowledgments normally appear.** 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA"* must not be used to endorse or promote products derived from this* software without prior written permission. For written* permission, please contact Project JXTA at http://www.jxta.org.** 5. Products derived from this software may not be called "JXTA",* nor may "JXTA" appear in their name, without prior written* permission of Sun.** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF* SUCH DAMAGE.* ====================================================================** This software consists of voluntary contributions made by many* individuals on behalf of Project JXTA. For more* information on Project JXTA, please see* <http://www.jxta.org/>.** This license is based on the BSD license adopted by the Apache Foundation.** $Id: UnicastDialogManager.java,v 1.9 2007/06/10 21:15:11 nano Exp $*/package net.jxta.myjxta.dialog;import net.jxta.myjxta.util.PipeUtil;import net.jxta.peergroup.PeerGroup;import net.jxta.protocol.PipeAdvertisement;import net.jxta.util.JxtaBiDiPipe;import net.jxta.util.JxtaServerPipe;import java.io.IOException;import java.net.SocketException;import java.util.List;/** * @author james todd [gonzo at jxta dot org] * @version $Id: UnicastDialogManager.java,v 1.9 2007/06/10 21:15:11 nano Exp $ */class UnicastDialogManager extends AbstractDialogManager { // private static final int TIMEOUT = 120 * 1000; private static final int TIMEOUT = 0; /** * The JxtaServerPiper on which to receive messages */ private JxtaServerPipe serverPipe = null; private ServerThread serverThread = null; public UnicastDialogManager(String name, String type) { super(name, type); } /** * Initializes this DialogManager for the indicated PeerGroup * Here the pipe is opened * * @param pg the PeerGroup for which to initialize this DialogManager */ public void initialize(PeerGroup pg) { // create a new serverPipe instance try { this.serverPipe = new JxtaServerPipe(pg, getPipeAdv(pg)); } catch (IOException ioe) { ioe.printStackTrace(System.out); } // Create a new thread that accepts connections // coming in on the newly created serverPipe if (this.serverPipe != null) { try { this.serverPipe.setPipeTimeout(TIMEOUT); } catch (SocketException se) { se.printStackTrace(System.out); } this.serverThread = new ServerThread(pg, this.serverPipe, getClass().getName() + ":JxtaServerPipe"); serverThread.start(); } } /** * { @inheritDoc } */ public void close() { if (serverThread != null) { serverThread.stopServer(); serverThread.interrupt(); } if (this.serverPipe != null) { try { this.serverPipe.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } } /** * Get the PipeAdvertisement for the indicated PeerGroup * * @param pg the PeerGroup for which to create the advertisment */ public PipeAdvertisement getPipeAdv(PeerGroup pg) { return PipeUtil.getAdv(pg, getDialogName(), getType(), null); } /** * The thread that waits on a new connection request is received * on the serverPipe instance */ private class ServerThread extends Thread { /** * The PeerGroup in which this listener operates */ private PeerGroup pg = null; private JxtaServerPipe serverPipe = null; private boolean stopped = false; /** * Create a new ServerThread object * * @param pg the PeerGroup in which this listener operates * @param name the name of the thread */ protected ServerThread(PeerGroup pg, JxtaServerPipe serverPipe, String name) { super(name); this.pg = pg; this.serverPipe = serverPipe; setDaemon(true); } public void stopServer() { stopped = true; if (this.serverPipe != null) if (!this.serverPipe.isClosed()) try { this.serverPipe.close(); } catch (IOException e) { e.printStackTrace(); } } /** * Wait until a new connection request is received * on the serverPipe instance and if so pass it on * to the registered DialogPipeListeners */ public void run() { JxtaBiDiPipe pipe = null; while (!stopped) { // wait until a connection request is received try { pipe = this.serverPipe.accept(); } catch (IOException ioe) { ioe.printStackTrace(); } // if a connection request is received, // pass it on to the registered DialogPipeListeners if (pipe != null) { List<DialogPipeListener> list = getListeners(this.pg); if (list != null) { for (DialogPipeListener aList : list) { (aList).receive(this.pg, pipe); } } } } //System.out.println("shutdown"); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -