rath.msnm
Class NotificationProcessor

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--rath.msnm.AbstractProcessor
              |
              +--rath.msnm.NotificationProcessor
All Implemented Interfaces:
Runnable, UserStatus

public class NotificationProcessor
extends AbstractProcessor
implements UserStatus

NS 서버와 일생을 같이하는 프로세서

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

Field Summary
 
Fields inherited from class rath.msnm.AbstractProcessor
callbackMap, in, isLive, msn, out, socket
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Fields inherited from interface rath.msnm.UserStatus
AWAY_FROM_COMPUTER, BE_RIGHT_BACK, BUSY, IDLE, INVISIBLE, OFFLINE, ON_THE_LUNCH, ON_THE_PHONE, ONLINE
 
Constructor Summary
NotificationProcessor(MSNMessenger msn, ServerInfo info)
           
NotificationProcessor(MSNMessenger msn, ServerInfo info, int trId)
           
 
Method Summary
protected  void acceptRinging(IncomingMessage msg)
          전화 받고 Switchboard Server와 세션을 연결한다.
 void cleanUp()
          스레드가 종료되고 스트림을 닫기 직전에 호출된다.
 void connectToSwitchboard(IncomingMessage msg)
          대화를 연결하기 위해 NS로 받은 새로운 SS의 주소를 가지고 SS에 접속하고 Calling요청을 시작한다.
 void doCallFriend(String loginName)
          주어진 loginName에게 대화요청 프로세스를 시작한다.
 SwitchboardSession doCallFriendWait(String loginName)
          주어진 loginName에데 대화요청 프로세스를 시작하고, 세션이 연결될때까지 계속 기다린다.
 void doCollectList(IncomingMessage msg)
          LST 메시지를 수집한다.
 String getMyStatus()
           
 void init()
          DS와의 연결이 맺어졌으니, 통신을 시작하기 위해 Version 정보를 보내는 일을 하게 된다.
 void judgeSerial(IncomingMessage msg)
          NS의 SYN 응답을 받았을때 호출되며, Client의 serial과 Server의 serial의 값이 다를 경우 RL과 FL을 List-up하여 sync를 맞춘다.
 void logout()
          NS에게 OUT코드를 전송하고 연결을 종료한다.
 void processAuth(IncomingMessage msg)
           
 void processINF(IncomingMessage msg)
           
 void processLogon(IncomingMessage msg)
           
 void processMessage(IncomingMessage msg)
          서버로부터 도착하는 메시지 (일방적인 push가 아닌)를 처리하는 부분이다.
 void processNotifyMessage(IncomingMessage msg)
          Server로부터 일방적으로 notify되는 메시지들을 처리하는 부분이다.
 void processRename(IncomingMessage msg)
           
 void processVER(IncomingMessage msg)
           
 void requestAdd(String loginName)
           
 void requestRemove(String loginName)
           
 void responseAdd(IncomingMessage msg)
           
 void responseRemove(IncomingMessage msg)
           
 void setMyFriendlyName(String newName)
           
 void setMyStatus(String code)
          자신의 상태를 변경한다.
 void start()
          프로세서 thread를 시작한다.
 
Methods inherited from class rath.msnm.AbstractProcessor
getCurrentTransactionId, getServerName, isAutoOutSend, lookupMethod, makeConnection, markTransactionId, processError, registerCallback, removeInfiniteTransactionId, run, sendCHLResponse, sendMessage, sendMimeMessage, setAutoOutSend, setServerName
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

NotificationProcessor

public NotificationProcessor(MSNMessenger msn,
                             ServerInfo info)

NotificationProcessor

public NotificationProcessor(MSNMessenger msn,
                             ServerInfo info,
                             int trId)
Method Detail

init

public void init()
          throws IOException
DS와의 연결이 맺어졌으니, 통신을 시작하기 위해 Version 정보를 보내는 일을 하게 된다.

Specified by:
init in class AbstractProcessor
IOException

processMessage

public void processMessage(IncomingMessage msg)
                    throws Exception
Description copied from class: AbstractProcessor
서버로부터 도착하는 메시지 (일방적인 push가 아닌)를 처리하는 부분이다.

Overrides:
processMessage in class AbstractProcessor
Exception

processNotifyMessage

public void processNotifyMessage(IncomingMessage msg)
                          throws Exception
Description copied from class: AbstractProcessor
Server로부터 일방적으로 notify되는 메시지들을 처리하는 부분이다. 이 메소드를 직접 호출하지는 말도록 하라.

Overrides:
processNotifyMessage in class AbstractProcessor
Exception

acceptRinging

protected void acceptRinging(IncomingMessage msg)
                      throws IOException
전화 받고 Switchboard Server와 세션을 연결한다. 알아서 Internal session hashmap에 저장될 것이다.

IOException

processVER

public void processVER(IncomingMessage msg)
                throws Exception
Exception

processINF

public void processINF(IncomingMessage msg)
                throws Exception
Exception

processAuth

public void processAuth(IncomingMessage msg)
                 throws Exception
Exception

processLogon

public void processLogon(IncomingMessage msg)
                  throws Exception
Exception

judgeSerial

public void judgeSerial(IncomingMessage msg)
                 throws IOException
NS의 SYN 응답을 받았을때 호출되며, Client의 serial과 Server의 serial의 값이 다를 경우 RL과 FL을 List-up하여 sync를 맞춘다.

IOException

doCollectList

public void doCollectList(IncomingMessage msg)
                   throws IOException
LST 메시지를 수집한다.

IOException

setMyStatus

public void setMyStatus(String code)
                 throws IOException
자신의 상태를 변경한다. 변경가능한 상태코드는 UserStatus 인터페이스에 정의된 것만을 사용하여야만 한다.

IOException

getMyStatus

public String getMyStatus()

setMyFriendlyName

public void setMyFriendlyName(String newName)
                       throws IOException
IOException

processRename

public void processRename(IncomingMessage msg)
                   throws IOException
IOException

start

public void start()
프로세서 thread를 시작한다.

Overrides:
start in class Thread

doCallFriend

public void doCallFriend(String loginName)
                  throws IOException
주어진 loginName에게 대화요청 프로세스를 시작한다.

IOException

requestAdd

public void requestAdd(String loginName)
                throws IOException
IOException

responseAdd

public void responseAdd(IncomingMessage msg)
                 throws IOException
IOException

requestRemove

public void requestRemove(String loginName)
                   throws IOException
IOException

responseRemove

public void responseRemove(IncomingMessage msg)
                    throws IOException
IOException

doCallFriendWait

public SwitchboardSession doCallFriendWait(String loginName)
                                    throws IOException,
                                           InterruptedException
주어진 loginName에데 대화요청 프로세스를 시작하고, 세션이 연결될때까지 계속 기다린다.

Returns:
연결된 SwitchboardSession
IOException
InterruptedException
Since:
2002/01/07, rath@xrath.com

connectToSwitchboard

public void connectToSwitchboard(IncomingMessage msg)
                          throws IOException
대화를 연결하기 위해 NS로 받은 새로운 SS의 주소를 가지고 SS에 접속하고 Calling요청을 시작한다.

IOException

cleanUp

public void cleanUp()
Description copied from class: AbstractProcessor
스레드가 종료되고 스트림을 닫기 직전에 호출된다.

Specified by:
cleanUp in class AbstractProcessor

logout

public void logout()
            throws IOException
NS에게 OUT코드를 전송하고 연결을 종료한다.

IOException