?? pipelistener.java
字號:
package jxta3;
import java.io.FileInputStream;
import java.util.Date;
import net.jxta.document.AdvertisementFactory;
import net.jxta.document.MimeMediaType;
import net.jxta.endpoint.Message;
import net.jxta.endpoint.MessageElement;
import net.jxta.endpoint.WireFormatMessage;
import net.jxta.endpoint.WireFormatMessageFactory;
import net.jxta.endpoint.Message.ElementIterator;
import net.jxta.exception.PeerGroupException;
import net.jxta.peergroup.NetPeerGroupFactory;
import net.jxta.peergroup.PeerGroup;
import net.jxta.pipe.InputPipe;
import net.jxta.pipe.PipeMsgEvent;
import net.jxta.pipe.PipeMsgListener;
import net.jxta.pipe.PipeService;
import net.jxta.protocol.PipeAdvertisement;
import net.jxta.util.CountingOutputStream;
import net.jxta.util.DevNullOutputStream;
public class PipeListener implements PipeMsgListener{
static PeerGroup netPeerGroup = null;
private final static String SenderMessage = "PipeListenerMsg";
private PipeService pipe;
private PipeAdvertisement pipeAdv;
private InputPipe pipeIn = null;
public static void main(String[] args){
PipeListener myapp = new PipeListener();
myapp.startJxta();
myapp.run();
}
private void startJxta() {
try{
//啟動默認點組
netPeerGroup = new NetPeerGroupFactory().getInterface();
} catch(PeerGroupException e){
System.out.println("fatal error: group creation failure");
e.printStackTrace();
System.exit(1);
}
pipe = netPeerGroup.getPipeService();
System.out.println("Reading in pipe.adv");
try{
//從文件中初始化管道通告
FileInputStream is = new FileInputStream("d:\\pipe.adv");
pipeAdv = (PipeAdvertisement)(PipeAdvertisement) AdvertisementFactory.newAdvertisement(
MimeMediaType.XMLUTF8,is);
is.close();
} catch(Exception e){
System.out.println("failed to read/parse pipe advertisement");
e.printStackTrace();
System.exit(-1);
}
}
private void run() {
try{
//創建一個異步輸入管道,如果有消息到達就會調用pipeMsgEvent
System.out.println("Creating input pipe");
pipeIn = pipe.createInputPipe(pipeAdv,this);
} catch(Exception e){
return;
}
if(pipeIn == null){
System.out.println("cannot open InputPipe");
System.exit(-1);
}
System.out.println("Waiting for msgs on input pipe");
}
public void pipeMsgEvent(PipeMsgEvent event) {
Message msg = null;
try{
//從事件中獲取信息
msg = event.getMessage();
if(msg == null)
return;
printMessageStats(msg,true);
} catch(Exception e){
e.printStackTrace();
return;
}
//獲取所有的消息元素
Message.ElementIterator en = msg.getMessageElements();
if(!en.hasNext()){
return;
}
//獲取鍵值為SenderMessage的value
MessageElement msgElement = msg.getMessageElement(null,SenderMessage);
if(msgElement.toString() == null){
System.out.println("null msg received");
} else
{
Date date = new Date(System.currentTimeMillis());
System.out.println("Message received at: "+ date.toString());
System.out.println("Message created at: "+ msgElement.toString());
}
}
private void printMessageStats(Message msg, boolean verbose) {
try{
CountingOutputStream cnt;
ElementIterator it = msg.getMessageElements();
System.out.println("----------BeginMessage-------------");
WireFormatMessage serialed = WireFormatMessageFactory.toWire(msg,
new MimeMediaType("application/x-jxta-msg"),(MimeMediaType[])null);
System.out.println("Message Size: "+serialed.getByteLength());
while(it.hasNext()){
MessageElement el = (MessageElement)it.next();
String eName = el.getElementName();
cnt = new CountingOutputStream(new DevNullOutputStream());
el.sendToStream(cnt);
long size = cnt.getBytesWritten();
System.out.println("Element" + eName + " : " + size);
if(verbose){
System.out.println("["+el+"]");
}
}
System.out.println("------------EndMessage--------------");
} catch(Exception e){
e.printStackTrace();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -