openfire smack包

在最近一個新的項目裏面要用openfire不少的自帶功能,好比:加好友,加聊天室,發消息,發送文件,獲取組消息,更新狀態等。雖然用c++開發,可是先用java實現一下。smack能夠說把openfire有設計的那些交互協議都封裝的很完整,在消息服務器,其實很好實現各類功能,說到底就是協議的定義,openfire本身定義了這幾種協議來實現這些功能,smack把這些協議封裝成對應的對象去處理,讓開發者更容易上手。 java

1.發消息:

public boolean sendMessage(String toJid,String content){
		Message message = new Message();
		message.setFrom(connectManager.getJid());
		message.setTo(toJid);
		message.setBody(content);
		message.setType(Message.Type.chat);
		message.setSubject(MSG_SUBJECT);//消息主題
		BaseInfo baseInfo = new BaseInfo();
		baseInfo.setRecvName("接收人");
		baseInfo.setSendName("發送人");
		message.addExtension(baseInfo);//消息包的擴展
		return connectManager.sendPacket(message);
	}
擴展包的java:
import org.jivesoftware.smack.packet.PacketExtension;

public class BaseInfo implements PacketExtension{

    private String sendName;
    private String recvName;
    
	public String getRecvName() {
		return recvName;
	}

	public void setRecvName(String recvName) {
		this.recvName = recvName;
	}

	public String getSendName() {
		return sendName;
	}

	public void setSendName(String sendName) {
		this.sendName = sendName;
	}

	public String getElementName() {
		 return "base_info";
	}

	public String getNamespace() {
        return "uc:staff_name";
	}
<span style="white-space:pre">	</span>//重寫xml方法
	public String toXML() {
		StringBuilder buf = new StringBuilder();
        buf.append("<").append(getElementName()).append(" xmlns=\"").append(getNamespace()).append(
            "\">");
        if (getSendName() != null) {
            buf.append("<send_name>").append(getSendName()).append("</send_name>");
        }
        if (getRecvName() != null) {
            buf.append("<rec_name>").append(getRecvName()).append("</rec_name>");
        }
        buf.append("</").append(getElementName()).append(">");
        return buf.toString();
	}

}

2.修改狀態

/**
	 * 修改狀態
	 * @param state
	 * @return
	 */
	public boolean sendPresence(String state){
		return sendPresence(state, null);
	}
	
	/**
	 * 針對某人修改狀態
	 * @param state
	 * @param toJid
	 * @return
	 */
	public boolean sendPresence(String state,String toJid){
		Presence.Type type = Presence.Type.available;
		Presence.Mode mode =null;
		String status =null;
		if("1".equals(state)){
			mode = Presence.Mode.chat;
			status = "空閒";
		}else if("2".equals(state)){
			mode = Presence.Mode.xa;
			status="離開一段時間";
		}else if("3".equals(state)){
			mode = Presence.Mode.away;
			status="離開";
		}else if("4".equals(state)){
			mode = Presence.Mode.dnd;
			status="正忙";
		}else if("5".equals(state)){
			type = Presence.Type.unavailable;
			status = "隱身";
		}else{
			return false;
		}
		Presence presence = new Presence(type);
		presence.setTo(toJid);
		presence.setMode(mode);
		presence.setStatus(status);
		return connectManager.sendPacket(presence);
	}

3.對Roster中好友組的操做

/** 
     * 返回全部組信息 
     * @return List(RosterGroup) 
     */  
    public List<RosterGroup> getGroups() {  
        List<RosterGroup> groupsList = new ArrayList<RosterGroup>();  
        Collection<RosterGroup> rosterGroup = roster.getGroups();  
        Iterator<RosterGroup> i = rosterGroup.iterator();  
        while (i.hasNext()){  
        	RosterGroup group = i.next();
            groupsList.add(group);
            log.debug("獲取組信息:name:"+group.getName());
      }
        return groupsList;  
    }  
  
    /** 
     * 返回相應(groupName)組裏的全部用戶
     *  
     * @return List(RosterEntry) 
     */  
    public List<RosterEntry> getEntriesByGroup(String groupName) {  
        List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();  
        RosterGroup rosterGroup = roster.getGroup(groupName); 
        if(rosterGroup !=null){
	        Collection<RosterEntry> rosterEntry = rosterGroup.getEntries();  
	        Iterator<RosterEntry> i = rosterEntry.iterator();  
	        while (i.hasNext()){ 
	        	RosterEntry entry = i.next();
	            EntriesList.add(entry);
	            log.debug("獲取好友信息:name:"+entry.getName()+",status:"+entry.getStatus()+",group:"+entry.getGroups()+",type:"+entry.getType()+",user:"+entry.getUser());
	        }
        }
        return EntriesList;  
    }  
  
    /** 
     * 返回全部用戶信息 
     *  
     * @return List(RosterEntry) 
     */  
    public List<RosterEntry> getAllEntries() {  
        List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();  
        Collection<RosterEntry> rosterEntry = roster.getEntries();  
        Iterator<RosterEntry> i = rosterEntry.iterator();  
        while (i.hasNext()){  
        	RosterEntry entry = i.next();
            EntriesList.add(entry);
            log.debug("獲取好友信息:name:"+entry.getName()+",status:"+entry.getStatus()+",group:"+entry.getGroups()+",type:"+entry.getType()+",user:"+entry.getUser());
        }
        return EntriesList;  
    }

4.對Roster好友的操做
/** 
     * 添加一個好友無分組 
     */  
    public boolean addUser(String userName,String name)  
    {  
        try {  
            roster.createEntry(userName, name, null);  
            return true;  
        } catch (Exception e) {  
        	log.error("添加一個好友無分組異常",e);
            return false;  
        }  
    }  
    /** 
     * 添加一個好友到分組 
     * @param roster 
     * @param userName 
     * @param name 
     * @return 
     */  
    public boolean addUser(String userName,String name,String groupName)  
    {  
        try {  
            roster.createEntry(userName, name,new String[]{groupName});  
            return true;  
        } catch (Exception e) {  
        	log.error("添加一個好友到分組異常",e);
            return false;  
        }  
    }  
      
    /** 
     * 刪除一個好友 
     * @param roster 
     * @param userName 
     * @return 
     */  
    public boolean removeUser(String userName){  
        try {  
            RosterEntry entry = roster.getEntry(userName);  
            roster.removeEntry(entry);  
        	log.debug("刪除一個好友:"+entry.getName());
            return true;  
        } catch (Exception e) {  
        	log.error("刪除一個好友異常",e);
            return false;  
        }  
          
    }
把聊天室的操做以及各類事件監聽器放到下一章。
相關文章
相關標籤/搜索