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

📄 manytomanydialog.java

📁 Myjxta的源代码 基于JXTA的P2P即时通信系统
💻 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.11 2007/06/10 21:15:12 nano Exp $*/package net.jxta.myjxta.plugins.groupchat;import net.jxta.endpoint.Message;import net.jxta.endpoint.StringMessageElement;import net.jxta.logging.Logging;import net.jxta.myjxta.MyJXTA;import net.jxta.myjxta.View;import net.jxta.myjxta.dialog.*;import net.jxta.myjxta.dialog.filter.*;import net.jxta.myjxta.dialog.listener.NewDialogListener;import net.jxta.myjxta.plugin.PluginView;import net.jxta.myjxta.ui.ChatDialogView;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 java.io.IOException;import java.util.EventObject;import java.util.HashMap;import java.util.Map;import java.util.logging.Level;import java.util.logging.Logger;/** * @author james todd [gonzo at jxta dot org] * @author mike mcangus [mcangus at jxta dot org] * @version $Id: ManyToManyDialog.java,v 1.11 2007/06/10 21:15:12 nano Exp $ */public final class ManyToManyDialog        extends Dialog        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 final 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.getName());    /**     * The OutputPipe on which to propagate messages     */    private OutputPipe pipe = null;    /**     * A cache of pipe we already opened     */    private Map<PipeAdvertisement, OutputPipe> pipeCache = null;    private int m_lastMessageDispatchNumber = 0;    private ChatDialogView dialogPanel;    //the listener that is informed about group connected / disconnected events    private final 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(myJxta, pa, group);        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.log(Level.SEVERE, "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);        init();    }    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 (Logging.SHOW_FINE && LOG.isLoggable(Level.FINE)) {            LOG.fine("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.setHtmlMessage("*** has left ***");            dispatch(goodbyeMsg);        }        clear();

⌨️ 快捷键说明

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