📄 mychatgroup.java
字号:
pipePrivateAdv.setDescription(myGroup.getPeerName());
pipePrivateAdv.getDocument(new MimeMediaType("text/xml")).sendToStream(fos);
fos.flush();
fos.close();
}
discoverySvc.publish(pipePrivateAdv, PeerGroup.DEFAULT_LIFETIME, PeerGroup.DEFAULT_EXPIRATION);
discoverySvc.remotePublish(pipePrivateAdv, DiscoveryService.ADV);
InputPipe inPrivatePipe = pipeSvc.createInputPipe(pipePrivateAdv, privateMsgListener);
inPipe = pipeSvc.createInputPipe(pipeAdv, this);
// System.out.println(myGroup.getPeerName());
// 建立输出通道
refreshOnline();
}
// 私聊时发来的信息处理
private void privateMessage(PipeMsgEvent pme){
Message msg = pme.getMessage();
/* 因为私聊时,信息里携带了对方的通告,所以可以这样获得。但暂时不这样
try{
StructuredDocument sd = StructuredDocumentFactory.newStructuredDocument(
new MimeMediaType("text/xml"), msg.getMessageElement("PipeAdv").getStream());
System.out.println(sd);
}catch(IOException ioe){
ioe.printStackTrace();
}
*/
MessageElement userName = null;
MessageElement sendContent = null;
try{
userName = msg.getMessageElement("UserName");
if (userName == null)return;
sendContent = msg.getMessageElement("SendContent");
jtaPrivateContent.append("[[ " + userName + " ]]\n" + sendContent + "\n");
jtaPrivateContent.setSelectionStart(jtaHistoryContent.getText().length());
}catch(Exception e){
e.printStackTrace();
}
}
// 刷新列表
private void refreshList(){ // 存在同步问题,多线程会执行此方法
Enumeration en = null;
try{
en = discoverySvc.getLocalAdvertisements(DiscoveryService.ADV,
"Name",
"MyChatGroup:PipePrivateAdv:"+name);
}catch(IOException de){
de.printStackTrace();
}
if(en==null || !en.hasMoreElements()) return ;
Advertisement adv = null;
PipeAdvertisement pa = null;
PipeAdvertisement padv = null;
Vector pipeInfo = null;
int length = 0;
while(en.hasMoreElements()){
try{
adv = (Advertisement)en.nextElement();
if (!adv.getAdvType().equals(PipeAdvertisement.getAdvertisementType())){
continue;
}
pa = (PipeAdvertisement)adv;
if(pipePrivateId.contains(pa.getPipeID().toString())){ // 是否已经存在该ID
System.out.println("已存在");
continue;
}
padv = (PipeAdvertisement)AdvertisementFactory.newAdvertisement(
PipeAdvertisement.getAdvertisementType());
padv.setPipeID(IDFactory.fromURL(
pa.getPipeID().getURL()
) );
padv.setType(PipeService.UnicastType);
try{
outPipe = pipeSvc.createOutputPipe(padv, createPipeTimeOut);
}catch(Exception ope){
continue;
}
if(pipePrivateId.contains(pa.getPipeID().toString())){ // 是否已经存在该ID
System.out.println("已存在");
continue;
}else{
pipePrivateId.add(pa.getPipeID().toString());
}
pipeInfo = new Vector();
pipeInfo.add(pa.getDescription());
pipeInfo.add(pa.getPipeID().toString());
pipeInfo.add(outPipe);
pipesPrivate.add(pipeInfo);
list.add(pa.getDescription());
}catch(Exception e){
e.printStackTrace();
}
}
((DefaultTableModel)jlTable.getModel()).fireTableDataChanged();
}
private void refreshOnline(){
Runnable tGroup = new Runnable(){
public void run(){
while(true){
discoveryGroup();
discoverySvc.getRemoteAdvertisements(null, DiscoveryService.ADV,
"Name", "MyChatGroup:PipeAdv:"+name,
findPipeCount
);
try{Thread.currentThread().sleep(10 * 60 * 1000);}catch(Exception e){}
}
}
};
new Thread(tGroup).start();
Runnable tList = new Runnable(){
public void run(){
while(true){
refreshList();
discoverySvc.getRemoteAdvertisements(null, DiscoveryService.ADV,
"Name", "MyChatGroup:PipePrivateAdv:"+name,
findPipeCount
);
try{Thread.currentThread().sleep(10 * 1000);}catch(Exception e){}
}
}
};
new Thread(tList).start();
}
private ModuleSpecAdvertisement doAdertisement(){
ModuleClassAdvertisement mca = (ModuleClassAdvertisement)AdvertisementFactory.newAdvertisement(
ModuleClassAdvertisement.getAdvertisementType());
ModuleClassID mcid = IDFactory.newModuleClassID();
mca.setModuleClassID(mcid);
mca.setName("ccc");
mca.setDescription("");
try{
discoverySvc.publish(mca);
discoverySvc.remotePublish(mca, DiscoveryService.ADV);
}catch(Exception e){
e.printStackTrace();
}
ModuleSpecAdvertisement msa = (ModuleSpecAdvertisement)AdvertisementFactory.newAdvertisement(
ModuleSpecAdvertisement.getAdvertisementType());
msa.setModuleSpecID(IDFactory.newModuleSpecID(mcid));
msa.setName("iiiiiiiiii");
msa.setDescription("lllllllllll");
return msa;
}
public void discoveryGroup(){
Enumeration en = null;
try{
en = discoverySvc.getLocalAdvertisements(DiscoveryService.ADV,
"Name",
"MyChatGroup:PipeAdv:"+name);
}catch(IOException ie){
ie.printStackTrace();
}
if(en==null || !en.hasMoreElements()) return ;
Advertisement adv = null;
PipeAdvertisement pa = null;
PipeAdvertisement padv = null;
Vector pipeInfo = null;
while(en.hasMoreElements()){
try{
adv = (Advertisement)en.nextElement();
if (!adv.getAdvType().equals(PipeAdvertisement.getAdvertisementType())){
continue;
}
pa = (PipeAdvertisement)adv;
if(pipeId.contains(pa.getPipeID().toString())){
continue;
}else{
pipeId.add(pa.getPipeID().toString());
}
padv = (PipeAdvertisement)AdvertisementFactory.newAdvertisement(
PipeAdvertisement.getAdvertisementType());
padv.setPipeID(IDFactory.fromURL(
pa.getPipeID().getURL()
) );
padv.setType(PipeService.PropagateType);
outPipe = pipeSvc.createOutputPipe(padv, createPipeTimeOut);
pipeInfo = new Vector();
pipeInfo.add(pa.getName());
pipeInfo.add(pa.getPipeID().toString());
pipeInfo.add(outPipe);
pipes.add(pipeInfo);
}catch(Exception e){
e.printStackTrace();
}
}
}
public void pipeMsgEvent(PipeMsgEvent pme){
MessageElement userName = null;
MessageElement sendContent = null;
try{
Message msg = pme.getMessage();
userName = msg.getMessageElement("UserName");
if (userName == null)return;
sendContent = msg.getMessageElement("SendContent");
jtaHistoryContent.append("[[ " + userName + " ]]\n" + sendContent + "\n");
jtaHistoryContent.setSelectionStart(jtaHistoryContent.getText().length());
}catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent ae){
if(ae.getActionCommand().equals("发送")){
if(jtfContent.getText().trim().equals("")) return;
int count = sendToAll();
if(count > 0) jtfContent.setText("");
jtfContent.requestFocus(true);
}else if(ae.getActionCommand().equals("刷新")){
//pipesPrivate.clear();
//pipePrivateId.clear();
//list.clear();
refreshList();
}else if(ae.getActionCommand().equals("私聊")){
int index = jlTable.getSelectedRow();
if(index==-1) return;
OutputPipe op = (OutputPipe)((Vector)pipesPrivate.get(index)).get(2);
String to = list.get(index).toString();
privateChat(op, to);
}
}
private void privateChat(OutputPipe op, String to){
String oneText = "";
oneText = JOptionPane.showInputDialog("发送给 - "+to, "");
if(oneText==null || oneText.equals(""))return;
jtaPrivateContent.append("[[ " + "发送给-" + to + " ]]\n" + oneText + "\n");
jtaPrivateContent.setSelectionStart(jtaHistoryContent.getText().length());
Message msg = new Message();
StringMessageElement smeUsername = new StringMessageElement("UserName", myGroup.getPeerName(), null);
StringMessageElement smeContent = new StringMessageElement("SendContent", oneText, null);
TextDocumentMessageElement tdme = new TextDocumentMessageElement("PipeAdv", (TextDocument)pipePrivateAdv.getDocument(new MimeMediaType("text/xml")), null);
msg.addMessageElement(smeUsername);
msg.addMessageElement(smeContent);
msg.addMessageElement(tdme);
try{
op.send(msg);
}catch(IOException ioe){
ioe.printStackTrace();
}
}
private int sendToAll(){
Enumeration en = pipes.elements();
Message msg = new Message();
StringMessageElement smeUsername = new StringMessageElement("UserName", myGroup.getPeerName(), null);
StringMessageElement smeContent = new StringMessageElement("SendContent", jtfContent.getText(), null);
msg.addMessageElement(smeUsername);
msg.addMessageElement(smeContent);
while(en.hasMoreElements()){
outPipe = (OutputPipe)((Vector)en.nextElement()).get(2);
try{
outPipe.send(msg);
}catch(Exception e){
}
}
return pipes.size();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -