rath.msnm
Class AbstractProcessor

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--rath.msnm.AbstractProcessor
All Implemented Interfaces:
Runnable
Direct Known Subclasses:
DispatchProcessor, NotificationProcessor, SwitchboardSession

public abstract class AbstractProcessor
extends Thread

각 DS, NS, SS의 공통이 되는 부분을 추상적으로 묶어놓은 클래스이다.

참고로 해당 Processor는 죽기전에 무조건 OUT을 보낸다. 보내지 않게 하려면 setAutoOutSend(false) 를 하라.

Version:
$Id: AbstractProcessor.java,v 1.2 2002/03/04 05:30:59 xrath Exp $ , since 2001/11/07
Author:
Jang-Ho Hwang, rath@xrath.com

Field Summary
protected  HashMap callbackMap
           
protected  BufferedReader in
           
protected  boolean isLive
           
 MSNMessenger msn
           
protected  PrintWriter out
           
protected  Socket socket
           
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
protected AbstractProcessor(MSNMessenger msn)
          Client processor가 아닌 Server processor로 사용할때 즉, ServerInfo가 필요없을때 이 생성자를 통하여 인스턴스를 생성하도록 한다.
protected AbstractProcessor(MSNMessenger msn, ServerInfo info)
          주어진 ServerInfo를 가지는 Processor를 생성한다.
protected AbstractProcessor(MSNMessenger msn, ServerInfo info, int trId)
          주어진 ServerInfo를 가지고 trId를 최초 트랜잭션 아이디로 가지는 Processor를 생성한다.
 
Method Summary
abstract  void cleanUp()
          스레드가 종료되고 스트림을 닫기 직전에 호출된다.
 int getCurrentTransactionId()
          다음에 전송되어야할 trId를 반환한다.
 String getServerName()
           
abstract  void init()
          서버와의 연결이 맺어진 후 해주어야 할 일이 있다면 이곳에 해주도록 한다.
 boolean isAutoOutSend()
          해당 processor가 종료될때 OUT 메시지를 자동전송하게 되어있는지 확인한다.
protected  Method lookupMethod(Callback cb)
           
protected  void makeConnection()
          해당 server와 tcp/ip 연결을 맺고, 입출력 스트림들을 생성한다.
 void markTransactionId(OutgoingMessage msg)
          해당 메시지에 적절한 trId를 설정해준다.
 void processError(Throwable e)
          해당 Processor에서 발생되는 모든 예외는 이곳에서 처리한다.
 void processMessage(IncomingMessage msg)
          서버로부터 도착하는 메시지 (일방적인 push가 아닌)를 처리하는 부분이다.
 void processNotifyMessage(IncomingMessage msg)
          Server로부터 일방적으로 notify되는 메시지들을 처리하는 부분이다.
protected  void registerCallback(Integer trId, Callback cb)
          수동으로 callback을 등록시킨다.
 void removeInfiniteTransactionId(int trId)
          무한 Callback 이였던 trId에 대해 종료시점이 되면 이 메소드를 통해 더이상 callback map에 존재하지 않도록 해제하여야 한다.
 void run()
          Thread loop 부분
 void sendCHLResponse(OutgoingMessage msg, String hash)
           
 void sendMessage(OutgoingMessage msg)
          보내고자 하는 메시지를 전송하고, trId를 하나 증가시킨다.
 void sendMimeMessage(OutgoingMessage msg, MimeMessage mime)
          MIME메시지를 보낼 때 사용한다.
 void setAutoOutSend(boolean autoOut)
          해당 processor가 종료될때 OUT 메시지를 자동전송할 것인지 설정한다.
 void setServerName(String name)
           
 
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, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

msn

public final MSNMessenger msn

callbackMap

protected HashMap callbackMap

socket

protected Socket socket

isLive

protected boolean isLive

in

protected BufferedReader in

out

protected PrintWriter out
Constructor Detail

AbstractProcessor

protected AbstractProcessor(MSNMessenger msn)
Client processor가 아닌 Server processor로 사용할때 즉, ServerInfo가 필요없을때 이 생성자를 통하여 인스턴스를 생성하도록 한다.


AbstractProcessor

protected AbstractProcessor(MSNMessenger msn,
                            ServerInfo info)
주어진 ServerInfo를 가지는 Processor를 생성한다. 기본적으로 트랜잭션 아이디는 0부터 시작된다.


AbstractProcessor

protected AbstractProcessor(MSNMessenger msn,
                            ServerInfo info,
                            int trId)
주어진 ServerInfo를 가지고 trId를 최초 트랜잭션 아이디로 가지는 Processor를 생성한다.

Method Detail

setServerName

public void setServerName(String name)

getServerName

public String getServerName()

setAutoOutSend

public void setAutoOutSend(boolean autoOut)
해당 processor가 종료될때 OUT 메시지를 자동전송할 것인지 설정한다. 기본값은 false이다.


isAutoOutSend

public boolean isAutoOutSend()
해당 processor가 종료될때 OUT 메시지를 자동전송하게 되어있는지 확인한다.


makeConnection

protected void makeConnection()
                       throws IOException
해당 server와 tcp/ip 연결을 맺고, 입출력 스트림들을 생성한다. 현재는 UTF-8 인코딩을 기본적으로 하도록 되어있다.

IOException

init

public abstract void init()
                   throws IOException
서버와의 연결이 맺어진 후 해주어야 할 일이 있다면 이곳에 해주도록 한다.

IOException

sendMessage

public void sendMessage(OutgoingMessage msg)
                 throws IOException
보내고자 하는 메시지를 전송하고, trId를 하나 증가시킨다.

IOException

sendMimeMessage

public void sendMimeMessage(OutgoingMessage msg,
                            MimeMessage mime)
                     throws IOException
MIME메시지를 보낼 때 사용한다.

IOException

sendCHLResponse

public void sendCHLResponse(OutgoingMessage msg,
                            String hash)
                     throws IOException
IOException

markTransactionId

public void markTransactionId(OutgoingMessage msg)
해당 메시지에 적절한 trId를 설정해준다. 내부적으로 trId는 정수형으로 1씩 증가하게 된다.


getCurrentTransactionId

public int getCurrentTransactionId()
다음에 전송되어야할 trId를 반환한다.


lookupMethod

protected Method lookupMethod(Callback cb)
                       throws NoSuchMethodException,
                              SecurityException
NoSuchMethodException
SecurityException

registerCallback

protected void registerCallback(Integer trId,
                                Callback cb)
수동으로 callback을 등록시킨다.


processMessage

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

Exception

processNotifyMessage

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

Exception

removeInfiniteTransactionId

public void removeInfiniteTransactionId(int trId)
무한 Callback 이였던 trId에 대해 종료시점이 되면 이 메소드를 통해 더이상 callback map에 존재하지 않도록 해제하여야 한다.


run

public final void run()
Thread loop 부분

Specified by:
run in interface Runnable
Overrides:
run in class Thread

cleanUp

public abstract void cleanUp()
스레드가 종료되고 스트림을 닫기 직전에 호출된다.


processError

public void processError(Throwable e)
해당 Processor에서 발생되는 모든 예외는 이곳에서 처리한다. 만약 색다른 처리를 하고 싶다면, overriding하라.