📄 peerinforesponsemsg.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 disclaimer 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 SUN MICROSYSTEMS 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: PeerInfoResponseMsg.java,v 1.2 2002/06/18 20:46:00 hamada Exp $
*/
package net.jxta.impl.protocol;
import java.io.InputStream;
import java.io.StringWriter;
import java.net.URL;
import java.util.Hashtable;
import java.util.Enumeration;
import java.net.MalformedURLException;
import java.net.UnknownServiceException;
import net.jxta.protocol.PeerInfoResponseMessage;
import net.jxta.document.Attribute;
import net.jxta.document.Attributable;
import net.jxta.document.Element;
import net.jxta.document.TextElement;
import net.jxta.document.MimeMediaType;
import net.jxta.document.Document;
import net.jxta.document.StructuredTextDocument;
import net.jxta.document.StructuredDocumentFactory;
import net.jxta.document.StructuredDocumentUtils;
import net.jxta.id.ID;
import net.jxta.id.IDFactory;
/**
* This class implements net.jxta.protocol.PeerInfoResponseMsg.
*
*/
public class PeerInfoResponseMsg extends PeerInfoResponseMessage {
public PeerInfoResponseMsg() {
super();
}
/**
* @deprecated Please use the Advertisement factory and accessors
**/
public PeerInfoResponseMsg(ID spid, ID tpid, long uptime, long timestamp, long itime, long otime, Hashtable itraffic, Hashtable otraffic) {
super();
setSourcePid(spid);
setTargetPid(tpid);
setUptime(uptime);
setTimestamp(timestamp);
setLastIncomingMessageTime(itime);
setLastOutgoingMessageTime(otime);
Enumeration ik = itraffic.keys();
while (ik.hasMoreElements()) {
String k = (String) ik.nextElement();
setIncomingTrafficElement(k,
((Long) itraffic.get(k)).longValue());
}
Enumeration ok = otraffic.keys();
while (ok.hasMoreElements()) {
String k = (String) ok.nextElement();
setOutgoingTrafficElement(k,
((Long) otraffic.get(k)).longValue());
}
}
public PeerInfoResponseMsg(Element root) {
initialize( root );
}
public void initialize(Element root) {
if( !TextElement.class.isInstance( root ) )
throw new IllegalArgumentException( getClass().getName() + " only supports TextElement" );
setSourcePid(null);
setTargetPid(null);
setUptime(0);
setTimestamp(0);
setLastIncomingMessageTime(0);
setLastOutgoingMessageTime(0);
TextElement doc = (TextElement) root;
Enumeration elements;
elements = doc.getChildren();
while (elements.hasMoreElements()) {
TextElement element = (TextElement) elements.nextElement();
String elementName = element.getName();
if (elementName.equals("sourcePid")) {
try {
URL peerid = IDFactory.jxtaURL( element.getTextValue() );
setSourcePid( IDFactory.fromURL( peerid ) );
} catch ( MalformedURLException badID ) {
throw new IllegalArgumentException( "Bad peerid ID in advertisement" );
} catch ( UnknownServiceException badID ) {
throw new IllegalArgumentException( "Unusable ID in advertisement" );
}
continue;
}
if (elementName.equals("targetPid")) {
try {
URL peerid = IDFactory.jxtaURL( element.getTextValue() );
setTargetPid( IDFactory.fromURL( peerid ) );
} catch ( MalformedURLException badID ) {
throw new IllegalArgumentException( "Bad peerid ID in advertisement" );
} catch ( UnknownServiceException badID ) {
throw new IllegalArgumentException( "Unusable ID in advertisement" );
}
}
if (elementName.equals("uptime")) {
setUptime(Long.parseLong(element.getTextValue()));
continue;
}
if (elementName.equals("timestamp")) {
setTimestamp(Long.parseLong(element.getTextValue()));
continue;
}
if (elementName.equals("response")) {
Enumeration elems = doc.getChildren();
if( elems.hasMoreElements() )
setResponse(StructuredDocumentUtils.copyAsDocument(
(Element) elems.nextElement() ) );
continue;
}
if (elementName.equals("traffic") ) {
Enumeration traffelems = doc.getChildren();
while (traffelems.hasMoreElements()) {
TextElement traffelem = (TextElement) traffelems.nextElement();
String traffelemName = traffelem.getName();
if (traffelemName.equals("lastIncomingMessageAt")) {
setLastIncomingMessageTime
(Long.parseLong(traffelem.getTextValue()));
continue;
}
if (traffelemName.equals("lastOutgoingMessageAt")) {
setLastOutgoingMessageTime
(Long.parseLong(traffelem.getTextValue()));
continue;
}
if (elementName.equals("in")) {
Enumeration children = traffelem.getChildren( "transport" );
while (children.hasMoreElements()) {
TextElement ch = (TextElement) children.nextElement();
Attribute transportName = ((Attributable)ch).getAttribute( "name" );
setIncomingTrafficElement
( transportName.getValue(),
Long.parseLong(ch.getTextValue()) );
}
continue;
}
if (elementName.equals("out")) {
Enumeration children = traffelem.getChildren( "transport" );
while (children.hasMoreElements()) {
TextElement ch = (TextElement) children.nextElement();
Attribute transportName = ((Attributable)ch).getAttribute( "name" );
setOutgoingTrafficElement
( transportName.getValue(),
Long.parseLong(ch.getTextValue()) );
}
continue;
}
}
}
}
}
public Document getDocument(MimeMediaType encodeAs) {
StructuredTextDocument doc = (StructuredTextDocument)
StructuredDocumentFactory.newStructuredDocument
(encodeAs, getMessageType());
TextElement e = null;
e = doc.createElement("sourcePid", getSourcePid().toString() );
doc.appendChild(e);
e = doc.createElement("targetPid", getTargetPid().toString() );
doc.appendChild(e);
Element response = getResponse();
if( null != response ) {
e = doc.createElement("response" );
doc.appendChild(e);
StructuredDocumentUtils.copyElements( doc, e, response );
}
e = doc.createElement("uptime", String.valueOf(getUptime()));
doc.appendChild(e);
e = doc.createElement("timestamp",
String.valueOf(getTimestamp()));
doc.appendChild(e);
Element traffic = doc.createElement("traffic");
doc.appendChild(traffic);
Element itime = doc.createElement
("lastIncomingMessageAt",
String.valueOf(getLastIncomingMessageTime()));
traffic.appendChild(itime);
Element otime = doc.createElement
("lastOutgoingMessageAt",
String.valueOf(getLastOutgoingMessageTime()));
traffic.appendChild(otime);
Element itraffic = doc.createElement("in");
traffic.appendChild(itraffic);
Enumeration ichannels = getIncomingTrafficChannels();
while (ichannels.hasMoreElements()) {
String ch = (String) ichannels.nextElement();
long tr = getIncomingTrafficOnChannel(ch);
e = doc.createElement( "transport", Long.toString(tr) );
itraffic.appendChild(e);
((Attributable) e).addAttribute( "name", ch );
}
Element otraffic = doc.createElement("out");
traffic.appendChild(otraffic);
Enumeration ochannels = getOutgoingTrafficChannels();
while (ochannels.hasMoreElements()) {
String ch = (String) ochannels.nextElement();
long tr = getOutgoingTrafficOnChannel(ch);
e = doc.createElement( "transport", Long.toString(tr) );
otraffic.appendChild(e);
((Attributable) e).addAttribute( "name", ch );
}
return doc;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -