📄 jxtaapp.java
字号:
/*
* JxtaApp.java
*
* Created on October 3, 2001, 12:41 AM
*/
package com.sams.jxta;
/*
* 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: JxtaApp.java,v 1.1 2002/04/03 06:40:47 turbogeek Exp $
*/
import com.sams.jxta.updateCMS.UpdateCMS;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.util.Enumeration;
import java.lang.reflect.InvocationTargetException;
import net.jxta.peergroup.PeerGroup;
import net.jxta.peergroup.PeerGroupFactory;
import net.jxta.exception.PeerGroupException;
import net.jxta.document.Advertisement;
import net.jxta.document.AdvertisementFactory;
import net.jxta.document.MimeMediaType;
import net.jxta.protocol.DiscoveryResponseMsg;
import net.jxta.protocol.PeerGroupAdvertisement;
import net.jxta.impl.peergroup.Platform;
import net.jxta.impl.peergroup.GenericPeerGroup;
import net.jxta.document.Advertisement;
import net.jxta.impl.discovery.*;
import net.jxta.discovery.*;
/**
* This is a quick and simple example to primarly illustrate how to start project jxta
* from an application, and how to create a DiscoveryListener interface
* This is meant as an on going effort, if you can add to the
* example to help others understand, and integrate project jxta,
* feel free to do so, please refer to the "todo" section in README .
*/
public class JxtaApp implements Runnable{
// classInit supplies these
static PeerGroup platformGroup = null;
static PeerGroup netPeerGroup = null;
static PeerGroupAdvertisement groupAdvertisement = null;
private DiscoveryService discovery;
private int myqueryid;
PeerGroupAdvertisement pgadv;
public JxtaApp() {
}
private void startJxta() {
try {
// create, and Start the default jxta NetPeerGroup
netPeerGroup = PeerGroupFactory.newNetPeerGroup();
} catch (PeerGroupException e) {
// could not instanciate the group, print the stack and exit
System.out.println("fatal error : group creation failure");
e.printStackTrace();
System.exit(1);
}
// this is how to obtain the group advertisement
groupAdvertisement = netPeerGroup.getPeerGroupAdvertisement();
}
// Start the application
public void startApplication(String args[]){
try{
UpdateCMS updateCMS = new UpdateCMS();
updateCMS.init(netPeerGroup,null,groupAdvertisement);
updateCMS.startApp(null);
}catch(PeerGroupException pge){
System.out.println("Error starting UpdateCMS");
pge.printStackTrace();
System.exit(-1);
}
}
/**
* This thread basically loops for ever discovering peers
* every minute, and displaying the results.
*/
public void run() {
try {
// Add ourselves as a DiscoveryListener for DiscoveryResponse events
discovery.addDiscoveryListener(new CMSDiscoveryListener());
myqueryid = discovery.getRemoteAdvertisements(null,
DiscoveryService.PEER,
null,null, 1);
while (true) {
// wait a bit before sending a discovery message
try {
Thread.sleep(10 * 1000);
} catch(Exception e) {
}
System.out.println("Sending a Discovery Message");
// look for any peer
myqueryid = discovery.getRemoteAdvertisements(null,
DiscoveryService.PEER,
null,
null, 5);
}
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* by implementing DiscoveryListener we must define this method
* to deal to discovery responses
*/
public void event(DiscoveryEvent ev) {
DiscoveryResponseMsg res = ev.getResponse();
// let's get the responding peer's advertisement
String aRes = res.getPeerAdv();
try {
InputStream is = new ByteArrayInputStream( (aRes).getBytes() );
pgadv = (PeerGroupAdvertisement)AdvertisementFactory.newAdvertisement(new MimeMediaType( "text/xml" ), is);
System.out.println(" [ Got a Discovery Response ["+
res.getResponseCount()+ " elements] ");
} catch (java.io.IOException ioe) {
System.out.println("error parsing remote peer's advertisement");
ioe.printStackTrace();
return;
}
// now out the goodies
Enumeration enum = res.getResponses();
String str=null;
Advertisement adv=null;
while (enum.hasMoreElements()) {
try {
str = (String) enum.nextElement();
// print out the response
// System.out.println(str);
// the following illustrates how to create
// the advertisement object from a response
adv =(Advertisement)
AdvertisementFactory.newAdvertisement(new MimeMediaType("text/xml"), new ByteArrayInputStream(str.getBytes()));
} catch (java.io.IOException e) {
// got a bad response. continue to the next response
System.out.println("error parsing response element");
e.printStackTrace();
continue;
}
}
}
static public void main(String args[]) {
// Initialize
JxtaApp myapp = new JxtaApp();
// Start JXTA
myapp.startJxta();
// Start the app (above for now...)
myapp.startApplication(args);
}
class CMSDiscoveryListener implements DiscoveryListener {
public void discoveryEvent(DiscoveryEvent e) {
DiscoveryResponseMsg msg = e.getResponse();
System.out.println("QueryValue:'"+msg.getQueryValue()+"'");
int advCount = msg.getResponseCount();
Enumeration enum = msg.getResponses();
for ( ; enum.hasMoreElements();) {
Object obj = enum.nextElement();
System.out.println("Type:"+obj.getClass().getName());
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -