📄 tictactoeinviteaction.java
字号:
/* * Created on Feb 25, 2005 * */package net.jxta.myjxta.plugins.tictactoe;import java.awt.event.ActionEvent;import java.io.IOException;import java.util.HashMap;import java.util.Map;import java.util.ResourceBundle;import javax.swing.AbstractAction;import net.jxta.document.AdvertisementFactory;import net.jxta.document.MimeMediaType;import net.jxta.document.StructuredDocument;import net.jxta.document.StructuredDocumentFactory;import net.jxta.document.StructuredTextDocument;import net.jxta.endpoint.MessageElement;import net.jxta.endpoint.TextDocumentMessageElement;import net.jxta.myjxta.dialog.Dialog;import net.jxta.myjxta.dialog.DialogManager;import net.jxta.myjxta.dialog.DialogMessage;import net.jxta.myjxta.plugins.tictactoe.commands.TicTacToeCommand;import net.jxta.myjxta.dialog.util.RemoteCommandInvoker;import net.jxta.myjxta.util.Group;import net.jxta.myjxta.util.GroupNode;import net.jxta.myjxta.util.Peer;import net.jxta.myjxta.util.PeerNode;import net.jxta.myjxta.util.Resources;import net.jxta.myjxta.View;import net.jxta.pipe.PipeService;import net.jxta.protocol.PipeAdvertisement;import org.apache.log4j.Level;import org.apache.log4j.Logger;public class TicTacToeInviteAction extends AbstractAction { private static final int INTERVAL = 250; private static final int MAX = INTERVAL * 4 * 75; private static final Logger LOG = Logger.getLogger (TicTacToeInviteAction.class.getName ()); private View view = null; private static final ResourceBundle STRINGS = Resources.getStrings(); public TicTacToeInviteAction (String name, View view) { super (name); this.view = view; if (LOG.isEnabledFor (Level.INFO)) { LOG.info ("TicTavToeAction instantiated"); } } public void actionPerformed (ActionEvent ae) { PeerNode pn = (PeerNode)this.view.getJxtaNode (PeerNode.class); final Peer p = pn != null ? pn.getPeer () : null; final Group g = pn != null ? ((GroupNode)(pn.getParent ())).getGroup () : null; String status = null; if (p != null && g != null) { status = STRINGS.getString ("status.command.initiate") + ": " + p.getName (); if (LOG.isEnabledFor (Level.INFO)) { LOG.info (status); } new Thread (new Runnable () { public void run () { process (g, p); } }, getClass ().getName () + ":getConnection").start (); } else { status = STRINGS.getString ("error.peer.invalid") + " " + p!=null?p.getName():null; if (LOG.isEnabledFor (Level.ERROR)) { LOG.error (status); } } if (status != null) { this.view.setStatus (status); } } private void process (Group g, Peer p) { LOG.setLevel(Level.INFO); String status = "initiating tictactoe action"; this.view.setStatus (status); if (LOG.isEnabledFor (Level.INFO)) { LOG.info (status); } //get pipe adv from DialogManager - this is the tictactoePipe StructuredDocument d = getPipeAdv (g); //attach it as a message element TextDocumentMessageElement te = d != null ? new TextDocumentMessageElement (TicTacToeCommand.PIPE, (StructuredTextDocument)d, null) : null; if (te != null) { if (LOG.isEnabledFor (Level.INFO)) { LOG.info (status); LOG.info ("instantiating tictactoeCommand"); } //command fetecher will send out a command on the command pipe RemoteCommandInvoker cf = new RemoteCommandInvoker (g, p.getPipeAdvertisement (), new TicTacToeCommand (), this.view.getControl()); Map<String, MessageElement> m = new HashMap<String, MessageElement> (); // add the our pipe element m.put (TicTacToeCommand.PIPE, te); if (LOG.isEnabledFor (Level.INFO)) { LOG.info ("dispatch tictactoecommand"); } cf.invoke (MAX, m); //get respsonse DialogMessage r = cf.getResponse (); if (LOG.isEnabledFor (Level.INFO)) { LOG.info ("tictactoeInvitationCommand response: " + r); } //this is why its important to have a consistent PIPE element in TestCommand MessageElement pae = r != null ? r.getMessageElement (TicTacToeCommand.PIPE) : null; if (pae != null) { status = "tictactoe pipe import" + ": " + p.getName (); this.view.setStatus (status); if (LOG.isEnabledFor (Level.INFO)) { LOG.info (status); LOG.info ("adding dialog"); } PipeAdvertisement pipeAdv = getPipeAdv(pae); if (pipeAdv!=null){ TicTacToeDialog dialog = (TicTacToeDialog) DialogManager.getDialog (TicTacToeDialog.class, g, pipeAdv, this.view.getControl()); dialog.setLocallyInitiated (true); this.view.getControl().addDialog ( dialog); } else { //this can happen! maybe if the user connects to his own peer? } } else { status = "request tictactoe pipe" + ": " + p.getName (); this.view.setStatus (status); if (LOG.isEnabledFor (Level.ERROR)) { LOG.error (status); } } } else { if (LOG.isEnabledFor (Level.ERROR)) { LOG.error ("invalid response"); } } LOG.setLevel(Level.ERROR); } private PipeAdvertisement getPipeAdv (MessageElement me) { if (LOG.isEnabledFor (Level.INFO)) { LOG.info ("get pipeAdv"); } StructuredDocument sd = null; try { sd = StructuredDocumentFactory.newStructuredDocument (MimeMediaType.XMLUTF8, me.getStream()); } catch (IOException e) { LOG.error ("can't document", e); }// if (me instanceof ByteArrayMessageElement) {// if (LOG.isEnabledFor (Level.INFO)) {// LOG.info ("me instanceof ByteMessageElement");// }//// try {// sd = StructuredDocumentFactory.newStructuredDocument (MimeMediaType.XMLUTF8,// ((ByteArrayMessageElement)me).getStream ());// } catch (IOException ioe) {// if (LOG.isEnabledFor (Level.ERROR)) {// LOG.error ("can't document", ioe);// }// }// } else {// if (LOG.isEnabledFor (Level.INFO)) {// LOG.info ("me not instanceof ByteMessageElement");// }// } PipeAdvertisement pa = null; if (sd != null) { try { pa = (PipeAdvertisement)AdvertisementFactory. newAdvertisement (MimeMediaType.XMLUTF8, sd.getStream ()); } catch (IOException ioe) { if (LOG.isEnabledFor (Level.ERROR)) { LOG.error ("can't get pipe advertisement", ioe); } } } return pa; } private StructuredDocument getPipeAdv (Group g) { if (LOG.isEnabledFor (Level.INFO)) { LOG.info ("getPipeAdvl"); } System.out.println("TTT Dilaog in invite action"); String pn = Dialog.getDialogNamer (TicTacToeDialog.class). getDialogName (g.getPeerGroup ().getPeerName ()); PipeAdvertisement pa = DialogManager.getInstance (g, pn, PipeService.UnicastType).getPipeAdv (g.getPeerGroup ()); return (StructuredDocument)pa.getDocument (MimeMediaType.XMLUTF8); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -