rath.msnm
Class MSNMessenger

java.lang.Object
  |
  +--rath.msnm.MSNMessenger

public class MSNMessenger
extends Object

MSN 메신져 서버에 접속하고 이것저것을 하기 위해 Entry point가 되는 클래스이다. login을 요청하고 loginComplete 이벤트가 발생된 후부터 이것저것 메소드를 사용할 수 있다. 그렇지 않으면 NS proc 미생성으로 NullPointerException을 만날것이다.


  MSNMessenger msn = new MSNMessenger( "xiguel@hotmail.com", "12341234" );
  msn.setInitialStatus( UserStatus.ONLINE );
  msn.addMsnListener( new MsnAdapter() {
      public void progressTyping( SwitchboardSession ss, 
          MsnFriend friend, String typingUser )
      {
          System.out.println( "Typing on " + friend.getLoginName() );
      }
      public void instantMessageReceived( SwitchboardSession ss,
          MsnFriend friend, MimeMessage mime )
      {
          System.out.println( "*** MimeMessage from " + friend.getLoginName() );
          System.out.println( mime.getMessage() );
          System.out.println( "*****************************" );
      }
  });
  msn.login();
 

Version:
$Id: MSNMessenger.java,v 1.1.1.1 2002/03/03 21:32:35 xrath Exp $, since 2001/11/09
Author:
Jang-Ho Hwang, rath@xrath.com

Field Summary
protected  ArrayList listeners
           
 
Constructor Summary
MSNMessenger()
          MSNMessenger 객체를 생성한다.
MSNMessenger(String loginName, String password)
          주어진 account정보로 MSNMessenger 객체를 생성한다.
 
Method Summary
 void addFriend(String loginName)
           
 void addMsnListener(MsnListener l)
          서버로부터 발생되는 이벤트나 메시지들을 처리할 MsnListner 인터페이스를 설정한다.
 void doCall(String loginName)
          대화요청을 건다.
 SwitchboardSession doCallWait(String loginName)
          doCall과 같은 일을 하지만, 세션이 연결될때까지 계속 기다린다는 것이 다르다.
 SwitchboardSession findSwitchboardSession(String loginName)
          해당 loginName이 포함된 세션중 무작위로 첫번째 세션을 찾아 반환한다.
 SwitchboardSession findSwitchboardSessionAt(String loginName)
          해당 loginName과 1:1로 연결된 세션을 찾아준다.
 void fireAddFailedEvent(int errcode)
           
 void fireBuddyListModifiedEvent()
           
 void fireFilePostedEvent(SwitchboardSession ss, int cookie, String filename, int filesize)
           
 void fireFileReceiveErrorEvent(VolatileDownloader down, Throwable e)
           
 void fireFileReceiveStartedEvent(VolatileDownloader down)
           
 void fireFileSendAcceptedEvent(SwitchboardSession ss, int cookie)
           
 void fireFileSendErrorEvent(VolatileTransferServer server, Throwable e)
           
 void fireFileSendRejectedEvent(SwitchboardSession ss, int cookie, String reason)
           
 void fireFileSendStartedEvent(VolatileTransferServer server)
           
 void fireInstantMessageEvent(SwitchboardSession ss, MsnFriend friend, MimeMessage mime)
           
 void fireJoinSessionEvent(SwitchboardSession ss, MsnFriend friend)
           
 void fireListOnlineEvent(MsnFriend friend)
           
 void fireLoginCompleteEvent(MsnFriend own)
           
 void fireLoginErrorEvent()
           
 void firePartSessionEvent(SwitchboardSession ss, MsnFriend friend)
           
 void fireProgressTypingEvent(SwitchboardSession ss, MsnFriend friend, String typeuser)
           
 void fireRenameNotifyEvent(MsnFriend friend)
           
 void fireSwitchboardSessionEndedEvent(SwitchboardSession ss)
           
 void fireSwitchboardSessionStartedEvent(SwitchboardSession ss)
           
 void fireUserOfflineEvent(String loginName)
           
 void fireUserOnlineEvent(MsnFriend friend)
           
 void fireWhoAddedMeEvent(MsnFriend friend)
           
 void fireWhoRemovedMeEvent(MsnFriend friend)
           
 BuddyGroup getBuddyGroup()
           
 String getInitialStatus()
          현재 설정된 초기 상태코드를 얻어온다.
 LocalCopy getLocalCopy()
           
 String getLoginName()
          설정된 로그인 이름(LoginName)을 반환한다.
 String getMyStatus()
          현재 자기 자신의 상태코드값을 얻어온다.
 MsnFriend getOwner()
          자기 자신의 MsnFriend 인스턴스를 반환한다.
 String getPassword()
          사용자의 비밀번호를 반환한다.
 boolean isLoggedIn()
          현재 로그인 된 상태인지 확인한다.
 void login()
          로그인을 시작한다.
 void login(String username, String password)
          주어진 이름과 비밀번호로 로그인을 시작한다.
 void logout()
          열려있던 모든 Switchboard session과의 연결을 종료하고 DS, NS에 Logout한 후 연결을 종료한다.
 void removeFriend(String loginName)
           
 void removeMsnListener(MsnListener l)
          해당 이벤트리스너를 해제한다.
 void sendFileRequest(String loginName, File file, String sessionId)
          해당 sessionId 세션으로 파일을 전송하기 위해 loginName에게 파일을 송신요청 메시지를 보낸다.
 void sendFileRequest(String loginName, File file, SwitchboardSession session)
          해당 sessionId 세션으로 파일을 전송하기 위해 loginName에게 파일을 송신요청 메시지를 보낸다.
 boolean sendMessage(MimeMessage msg, SwitchboardSession session)
          주어진 loginName을 가진 사용자에게 MIME 메시지를 전달한다.
 boolean sendMessage(String loginName, MimeMessage msg)
          주어진 loginName을 가진 사용자에게 MIME 메시지를 전달한다.
 boolean sendMessage(String loginName, MimeMessage msg, String sessionId)
          주어진 loginName을 가진 사용자에게 MIME 메시지를 전달한다.
 void setInitialStatus(String code)
          로그인 할때의 초기 상태값을 설정한다.
 void setMyFriendlyName(String newName)
           
 void setMyStatus(String status)
          자신의 상태를 변경한다.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

listeners

protected ArrayList listeners
Constructor Detail

MSNMessenger

public MSNMessenger()
MSNMessenger 객체를 생성한다.


MSNMessenger

public MSNMessenger(String loginName,
                    String password)
주어진 account정보로 MSNMessenger 객체를 생성한다.

Parameters:
loginName - 사용할 login 이름. (e.g. windrath@hotmail.com)
password - 자신의 password
Method Detail

getBuddyGroup

public BuddyGroup getBuddyGroup()

getLocalCopy

public LocalCopy getLocalCopy()

setInitialStatus

public void setInitialStatus(String code)
로그인 할때의 초기 상태값을 설정한다. 기본값으로는 '온라인'이다. 이곳에 적용할 수 있는 상태값들은 UserStatus 인터페이스에 선언되어있는 상수들을 사용하면 된다.


getInitialStatus

public String getInitialStatus()
현재 설정된 초기 상태코드를 얻어온다.


isLoggedIn

public boolean isLoggedIn()
현재 로그인 된 상태인지 확인한다.


addMsnListener

public void addMsnListener(MsnListener l)
서버로부터 발생되는 이벤트나 메시지들을 처리할 MsnListner 인터페이스를 설정한다. 원래는 multi-listener를 지원해야하지만, 현재는 단일 Listener 구조를 사용한다. 그러므로 반드시 리스너를 설정해야한다.


fireInstantMessageEvent

public void fireInstantMessageEvent(SwitchboardSession ss,
                                    MsnFriend friend,
                                    MimeMessage mime)

fireJoinSessionEvent

public void fireJoinSessionEvent(SwitchboardSession ss,
                                 MsnFriend friend)

fireListOnlineEvent

public void fireListOnlineEvent(MsnFriend friend)

fireLoginCompleteEvent

public void fireLoginCompleteEvent(MsnFriend own)

firePartSessionEvent

public void firePartSessionEvent(SwitchboardSession ss,
                                 MsnFriend friend)

fireProgressTypingEvent

public void fireProgressTypingEvent(SwitchboardSession ss,
                                    MsnFriend friend,
                                    String typeuser)

fireSwitchboardSessionStartedEvent

public void fireSwitchboardSessionStartedEvent(SwitchboardSession ss)

fireSwitchboardSessionEndedEvent

public void fireSwitchboardSessionEndedEvent(SwitchboardSession ss)

fireUserOnlineEvent

public void fireUserOnlineEvent(MsnFriend friend)

fireUserOfflineEvent

public void fireUserOfflineEvent(String loginName)

fireFilePostedEvent

public void fireFilePostedEvent(SwitchboardSession ss,
                                int cookie,
                                String filename,
                                int filesize)

fireFileSendAcceptedEvent

public void fireFileSendAcceptedEvent(SwitchboardSession ss,
                                      int cookie)

fireFileSendRejectedEvent

public void fireFileSendRejectedEvent(SwitchboardSession ss,
                                      int cookie,
                                      String reason)

fireFileSendStartedEvent

public void fireFileSendStartedEvent(VolatileTransferServer server)

fireFileReceiveStartedEvent

public void fireFileReceiveStartedEvent(VolatileDownloader down)

fireFileSendErrorEvent

public void fireFileSendErrorEvent(VolatileTransferServer server,
                                   Throwable e)

fireFileReceiveErrorEvent

public void fireFileReceiveErrorEvent(VolatileDownloader down,
                                      Throwable e)

fireWhoAddedMeEvent

public void fireWhoAddedMeEvent(MsnFriend friend)

fireWhoRemovedMeEvent

public void fireWhoRemovedMeEvent(MsnFriend friend)

fireBuddyListModifiedEvent

public void fireBuddyListModifiedEvent()

fireAddFailedEvent

public void fireAddFailedEvent(int errcode)

fireLoginErrorEvent

public void fireLoginErrorEvent()

fireRenameNotifyEvent

public void fireRenameNotifyEvent(MsnFriend friend)

removeMsnListener

public void removeMsnListener(MsnListener l)
해당 이벤트리스너를 해제한다.


getLoginName

public String getLoginName()
설정된 로그인 이름(LoginName)을 반환한다.


getPassword

public String getPassword()
사용자의 비밀번호를 반환한다.


getOwner

public MsnFriend getOwner()
자기 자신의 MsnFriend 인스턴스를 반환한다. 만약 로그인하지 않았다면, null을 반환할 것이다.


login

public void login(String username,
                  String password)
주어진 이름과 비밀번호로 로그인을 시작한다. 이럴 경우 생성자에서 받은 이름과 비밀번호는 무시된다.


login

public void login()
로그인을 시작한다.


logout

public void logout()
열려있던 모든 Switchboard session과의 연결을 종료하고 DS, NS에 Logout한 후 연결을 종료한다.


setMyStatus

public void setMyStatus(String status)
                 throws IOException
자신의 상태를 변경한다. 상태 문자열은 UserStatus 인터페이스에 정의되어있는 문자열만을 사용하여야만 한다. 로그인이 끝난 직후에는 Default로 온라인 상태가 되어있을 것이다.

IOException

getMyStatus

public String getMyStatus()
현재 자기 자신의 상태코드값을 얻어온다.


setMyFriendlyName

public void setMyFriendlyName(String newName)
                       throws IOException
IOException

doCall

public void doCall(String loginName)
            throws IOException
대화요청을 건다. 비동기적으로 처리되기 때문에, 이 메소드의 작업이 끝났다고 해서 연결이 이루어지는 것은 아니다. 이 메소드는 곧바로 return 된다.

보통 연결이 이루어지는데는 2-3초 정도의 시간이 걸린다.

IOException

addFriend

public void addFriend(String loginName)
               throws IOException
IOException

removeFriend

public void removeFriend(String loginName)
                  throws IOException
IOException

doCallWait

public SwitchboardSession doCallWait(String loginName)
                              throws IOException,
                                     InterruptedException
doCall과 같은 일을 하지만, 세션이 연결될때까지 계속 기다린다는 것이 다르다.

Object.wait 메소드를 사용하여 기다리게 되고, 세션 연결 메시지가 올때까지 계속 대기하게 된다.

IOException
InterruptedException

findSwitchboardSession

public SwitchboardSession findSwitchboardSession(String loginName)
해당 loginName이 포함된 세션중 무작위로 첫번째 세션을 찾아 반환한다. 만약 그러한 세션이 존재하지 않는다면, null을 반환한다.

Returns:
loginName이 포함된 세션이 없다면 null을 반환.

findSwitchboardSessionAt

public SwitchboardSession findSwitchboardSessionAt(String loginName)
해당 loginName과 1:1로 연결된 세션을 찾아준다. 만약 세션이 존재하지 않는다면, null을 반환한다.


sendMessage

public boolean sendMessage(String loginName,
                           MimeMessage msg)
                    throws IOException
주어진 loginName을 가진 사용자에게 MIME 메시지를 전달한다. 만약 loginName을 가진 사용자와의 열린 session이 존재하지 않는다면, 즉시 false를 반환할 것이다.

Returns:
true - 성공적으로 전송하였을때, false - 보내기가 실패했을때.
IOException

sendMessage

public boolean sendMessage(String loginName,
                           MimeMessage msg,
                           String sessionId)
                    throws IOException
주어진 loginName을 가진 사용자에게 MIME 메시지를 전달한다. 대신 loginName이 여러개일 경우 sessionId와 일치하는 세션으로만 전송한다. 만약 일치하는 세션이 없다면 메시지는 전달되지 않을 것이며, sessionId가 null이라면 첫번째 발견되는 임의의 세션에 전달될 것이다.

물론 sessionId가 null이고 loginName을 포함하는 세션이 존재하지 않는다면 전송되지 않고 false를 반환한다.

Returns:
true - 성공적으로 전송하였을때, false - 보내기가 실패했을때.
IOException

sendMessage

public boolean sendMessage(MimeMessage msg,
                           SwitchboardSession session)
                    throws IOException
주어진 loginName을 가진 사용자에게 MIME 메시지를 전달한다. 만약 일치하는 세션이 없다면 메시지는 전달되지 않을 것이며, session이 null이라면 전송되지 않을 것이다.

Returns:
true - 성공적으로 전송하였을때, false - 보내기가 실패했을때.
IOException

sendFileRequest

public void sendFileRequest(String loginName,
                            File file,
                            String sessionId)
                     throws IOException
해당 sessionId 세션으로 파일을 전송하기 위해 loginName에게 파일을 송신요청 메시지를 보낸다.

IOException

sendFileRequest

public void sendFileRequest(String loginName,
                            File file,
                            SwitchboardSession session)
                     throws IOException
해당 sessionId 세션으로 파일을 전송하기 위해 loginName에게 파일을 송신요청 메시지를 보낸다.

IOException