IM读取联系人

最近在做IM读取联系人的工作,主要包括MSN和Gtalk,研究了以下smack和jml的文档,发现还是比较容易的,虽然代码很少,但是却颇费了一般周折
代码如下:

package com.ruby.service.contacts;

import java.util.ArrayList;
import java.util.List;

import net.sf.jml.MsnContact;
import net.sf.jml.MsnList;
import net.sf.jml.MsnMessenger;
import net.sf.jml.MsnUserStatus;
import net.sf.jml.event.MsnContactListAdapter;
import net.sf.jml.impl.MsnMessengerFactory;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;

public class IMRosterService {
    
    
private String user;
    
private String password;
    
private String type;

    
public IMRosterService(String user, String password, String type) {
        
this.user = user;
        
this.password = password;
        
this.type = type;
    }
    
    
public List<ContactFriend> getContactList() {
        
if(type.equals("msn"))
            
return getMsnRoster();
        
return getGtalkRoster();
    }
    
    
private List<ContactFriend> getMsnRoster() {
        MsnMessenger messenger 
= null;
        
final List<ContactFriend> list = new ArrayList<ContactFriend>();
        
try {
            messenger 
= MsnMessengerFactory.createMsnMessenger(user, password);
            messenger.getOwner().setInitStatus(MsnUserStatus.BUSY);

            messenger.addContactListListener(
new MsnContactListAdapter() {
                
public void contactListInitCompleted(MsnMessenger messenger) {
                    MsnContact[] contacts 
= messenger.getContactList().getContactsInList(MsnList.AL);
                    
for (int i = 0; i != contacts.length; i++) {
                        String email 
= contacts[i].getEmail().getEmailAddress();
                        String name  
= contacts[i].getDisplayName();
                        list.add(
new ContactFriend(email, name));
                    }
                }
            });
            
            messenger.login();
            
// must wait until result
            Thread.sleep(5000);
            
        } 
catch (Exception e) {
            e.printStackTrace();
        } 
finally {
            messenger.logout();
        }
        
return list;
    }

    
private List<ContactFriend> getGtalkRoster() {
        
        List
<ContactFriend> list = new ArrayList<ContactFriend>();
        ConnectionConfiguration connectionConfig 
= new ConnectionConfiguration("talk.google.com"5222"gmail.com");
        XMPPConnection connection 
= new XMPPConnection(connectionConfig);
        
try {
            connection.connect();
            connection.login(user, password);
            
            Roster roster 
= connection.getRoster();
            
            
if(roster != null) {
                
for (RosterEntry entry : roster.getEntries()) { 
                    String email 
= entry.getUser();
                    String name 
= entry.getName();
                    
if(name==null) {
                        name 
= email;
                    }
                    ContactFriend friend 
= new ContactFriend(email, name);
                    list.add(friend);
                }
            }

        } 
catch (XMPPException e) {
            e.printStackTrace();
        } 
finally {
            
if(connection.isConnected())
            connection.disconnect();
        }
        
return list;
    }

}

前几天发现sourceforge被封了,感觉影响还不大,可是真正工作的时候就感觉到了,smack还好,可是jml的src和jar都在上面,后来发现大部分的时间是在找jar包,这里也把上面用到的jar包的下载地址贴出来了。

我是通过Google快照才找到jml的下载地址的:http://203.208.37.104/search?q=cache:y-nIvXx4G_IJ:sourceforge.net/project/showfiles.php%3Fgroup_id%3D118829+Java+MSN+Messenger+Library+jar&hl=zh-CN&ct=clnk&cd=2&gl=cn&st_usg=ALhdy2_lUuTxxQy80mgPaNFQ6wg76W1v6w
在里面可以找到下载文件:http://downloads.sourceforge.net/java-jml/jml-1.0b2.jar?modtime=1186257954&big_mirror=0,用迅雷就好了,jml又要用到另外一个组件:cindy,作者同为crmky,而且必须用cindy-2.4.4,还好找到了sourceforge的镜像,下载地址为:http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/c/ci/cindy/cindy-2.4.4.jar

后面有时间再继续研究openfire的IM-Gateway吧,代码的确写的比较优雅
posted @ 2008-07-03 13:23  yangli  阅读(1318)  评论(4编辑  收藏  举报