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

📄 manytomanydialog.java

📁 jxta官方例程
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**  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 Project 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: ManyToManyDialog.java,v 1.8 2006/08/03 21:24:09 nano Exp $*/package net.jxta.myjxta.plugins.groupchat;import java.io.IOException;import java.util.EventObject;import java.util.HashMap;import java.util.Map;import java.util.TimerTask;import net.jxta.endpoint.Message;import net.jxta.endpoint.StringMessageElement;import net.jxta.myjxta.MyJXTA;import net.jxta.myjxta.View;import net.jxta.myjxta.dialog.AbstractDialog;import net.jxta.myjxta.dialog.Dialog;import net.jxta.myjxta.dialog.DialogKeys;import net.jxta.myjxta.dialog.DialogManager;import net.jxta.myjxta.dialog.DialogMessage;import net.jxta.myjxta.dialog.DialogPipeListener;import net.jxta.myjxta.dialog.filter.BanFilter;import net.jxta.myjxta.dialog.filter.DirectiveFilter;import net.jxta.myjxta.dialog.filter.EmoticonFilter;import net.jxta.myjxta.dialog.filter.EmptyMessageFilter;import net.jxta.myjxta.dialog.filter.EmptyMessageOrCommandFilter;import net.jxta.myjxta.dialog.filter.HTMLNormalizerFilter;import net.jxta.myjxta.dialog.filter.LegacyAnnounceFilter;import net.jxta.myjxta.dialog.filter.PingPresenceFilter;import net.jxta.myjxta.dialog.filter.URIFilter;import net.jxta.myjxta.dialog.listener.NewDialogListener;import net.jxta.myjxta.plugin.PluginPanel;import net.jxta.myjxta.ui.ChatDialogPanel;import net.jxta.myjxta.util.Env;import net.jxta.myjxta.util.Group;import net.jxta.myjxta.util.GroupListener;import net.jxta.peergroup.PeerGroup;import net.jxta.pipe.OutputPipe;import net.jxta.pipe.PipeID;import net.jxta.pipe.PipeService;import net.jxta.protocol.PipeAdvertisement;import net.jxta.util.JxtaBiDiPipe;import org.apache.log4j.Level;import org.apache.log4j.Logger;/** * @author james todd [gonzo at jxta dot org] * @author mike mcangus [mcangus at jxta dot org] * @version $Id: ManyToManyDialog.java,v 1.8 2006/08/03 21:24:09 nano Exp $ */public class ManyToManyDialog        extends AbstractDialog        implements DialogPipeListener {    public static final String SEQ_NR_MSGKEY = "SEQ_NR";//    public static boolean ACTIVATE_SEQNR=System.getProperty("DEBUG_MSG_SEQ_NR","false").equalsIgnoreCase("true");    public static boolean ACTIVATE_SEQNR = true;    public static final String IMFREE_NAME = "";    private static String prefix = "JxtaTalk";    public static final DialogKeys KEYS = new DialogKeys(prefix + "SenderName", prefix + "Message",            prefix + "SenderMessage", prefix + "GroupId", "GrpName",            prefix + "Command");    private static final Logger LOG = Logger.getLogger(ManyToManyDialog.class);    /**     * The OutputPipe on which to propagate messages     */    private OutputPipe pipe = null;    /**     * A cache of pipe we already opened     */    private Map<PipeAdvertisement, OutputPipe> pipeCache = null;    /**     * The Timer Task that sends the periodic ping signal     */    private TimerTask timer = null;    private int m_lastMessageDispatchNumber = 0;    private ChatDialogPanel dialogPanel;    //the listener that is informed about group connected / disconnected events    private GroupListener myGroupListener;    static {        DIALOG_NAME = IMFREE_NAME;    }    /**     * Create a new group dialog     *     * @param group  the Group in which this group chat takes place     * @param pa     The PipeAdvertisement to be used by the Dialog     *               for joining the MyJXTA group.     * @param myJxta the MyJXTA instance to use     */    public ManyToManyDialog(Group group, PipeAdvertisement pa,                            MyJXTA myJxta) {        super(group, pa, myJxta);        if (LOG.isEnabledFor(Level.DEBUG)) {            LOG.debug("Begin ManyToManyDialog(Group, PipeAdvertisement, MyJXTA) Constructor");        }        PeerGroup pg = getGroup().getPeerGroup();        setDialogMessage(new DialogMessage(pg.getPeerName(), null,                pg.getPeerGroupID().toString(), pg.getPeerGroupName(), KEYS));        // retrieve the correct instance of the DialogManager        DialogManager dm = DialogManager.getInstance(group,                Dialog.getDialogNamer(ManyToManyDialog.class).                        getDialogName(pg.getPeerName()),                PipeService.PropagateType);        dm.addPipeListener(pg, this);        // Create the OutputPipe to propate messages        OutputPipe pipe = getPipe(pa);        // initialize the pipe        if (pipe == null) {            try {                pipe = pg.getPipeService().createOutputPipe(pa, 100);                setPipe(pa, pipe);            } catch (IOException ioe) {                LOG.error("Caught unexpected Exception", ioe);            }        } else {            setPipe(null, pipe);        }        // update the DialogMessage template to report the        // correct  PeerGroup name        DialogMessage dmsg = getDialogMessage();        dmsg.setLabel(dmsg.getGroupName());        setDialogMessage(dmsg);        addListener(new NewDialogListener(getGroup(), getMyJXTA()));        myGroupListener=new GroupListener(){            public void groupEvent(Group g, String s, EventObject p_sourceEvent) {                updateConnectionState();            }        };        group.addListener(myGroupListener);        // start the timer        //timer = new PingTask();        //myJxta.startTimer(timer, Env.PING_INTERVAL);        init();        if (LOG.isEnabledFor(Level.DEBUG)) {            LOG.debug("End   ManyToManyDialog(Group, PipeAdvertisement, MyJXTA) Constructor");        }    }    private void updateConnectionState() {        if (this.dialogPanel!=null)            this.dialogPanel.updateConnectionState();    }    /**     * close: cut all the strings attached to this Dialog.     */    public void close() {        if (m_closed)            return;                if (LOG.isEnabledFor(Level.DEBUG)) {            LOG.debug("Begin close()");        }        		if (this.pipe!=null && !m_closed){            DialogMessage goodbyeMsg=(DialogMessage) getDialogMessage().clone();            goodbyeMsg.setCommand(GOODBYE_CMD);            try {            	final Group group2 = getGroup();            	if (group2!=null){            		final PipeID ownPeersCommandId = group2.getOwnPeersCommandId();            		if (ownPeersCommandId!=null){            			goodbyeMsg.addMessageElement("COMMAND_PIPE", new StringMessageElement(Dialog.IMFREE+"CommandPipe",ownPeersCommandId.toString(),null));            		}            	}            } catch (Exception e){            	//nothing             	//safety catch because this has been added 1 day before the 2.4 release            }            //goodbyeMsg.setMessage("*** has left ***");            dispatch(goodbyeMsg);        }        clear();        // close the timer task        if (timer != null) {            timer.cancel();        }        if (this.myGroupListener!=null){            getGroup().removeListener(myGroupListener);

⌨️ 快捷键说明

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