⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mychatgroup.java

📁 利用jxta编写的聊天室,能在局域网内动态检测参与人员,通过它,可以了解JXTA运行机制.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		    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 + -