2017-01-04 1 views
0

저는 자바 초보자입니다. Openfire 플러그인에서 오프라인 세션을 처리해야합니다. 플러그인 개발 의사로부터 기본 사항을 이해할 수 있지만 openfire의 오프라인 이벤트를 처리하는 방법을 알 수는 없습니다.Openfire 플러그인에서 오프라인 이벤트 처리를 추가하는 방법은 무엇입니까?

session_created 
session_destroyed 
anonymous_session_created 
anonymous_session_destroyed 
resource_bound 

이러한 이벤트는 다음 존재 플러그인으로 구현되는 수신기를 가지고 : 우리가 미리 정의 된 이벤트 다음 한 패키지 org.jivesoftware.openfire.event이

의 클래스 "SessionEventDispatcher"가있다. 오프라인 이벤트도 추가해야하는 경우 계속 진행하는 방법을 이해할 수 있도록 도와주세요.

온라인 사용자를 redis로 저장하고 있지만 일부는 openfire의 사용자 세션이 redis의 사용자보다 적은데, 이는 사용자 세션이 만들어지고 redis로 추가되기 때문에 플러그인의 일부 오프라인 이벤트를 처리하지 않는다는 것을 의미합니다. 사용자 세션은 redis에서 제거를 처리하기 위해 명시 적으로 닫히지 않으며,이 불일치에 직면합니다.

+0

더 나은 이해를 위해 시나리오를 설명 할 수 있습니까? 어떤 사용자에 대해서도 오프라인 메시지를 처리하고 싶다면? –

답변

0

귀하의 질문을 명확하게 이해할 수없는 경우 제발 정정하십시오. org.jivesoftware.openfire.user.PresenceEventListener 인터페이스를 살펴 보시겠습니까? 내가 그 인터페이스 구현 예를 들어 :

public class CustomPresenceEventListener implements PresenceEventListener { 

private static final Logger LOG = LoggerFactory.getLogger(CustomPresenceEventListener.class); 

@Override 
public void availableSession(ClientSession session, Presence presence) { 
    LOG.info("\n\n=======SESSION AVAILABLE=========\n"); 
    try { 
     LOG.info("USER : {}", session.getUsername()); 
    } catch (UserNotFoundException e) { 
     LOG.info(e.getMessage(), e); 
    } 
    LOG.info("\n================\n\n"); 
} 

@Override 
public void unavailableSession(ClientSession session, Presence presence) { 
    LOG.info("\n\n=======SESSION UNAVAILABLE=========\n"); 
    try { 
     LOG.info("USER : {}", session.getUsername()); 
    } catch (UserNotFoundException e) { 
     LOG.info(e.getMessage(), e); 
    } 
    LOG.info("\n================\n\n"); 
} 

@Override 
public void presenceChanged(ClientSession session, Presence presence) { 
} 

@Override 
public void subscribedToPresence(JID subscriberJID, JID authorizerJID) { 

} 

@Override 
public void unsubscribedToPresence(JID unsubscriberJID, JID recipientJID) { 

} 

을 그리고 추가 /를이 리스너를 제거합니다

PresenceEventDispatcher.addListener(presenceEventListener); 
PresenceEventDispatcher.removeListener(presenceEventListener); 

내가의 Openfire에 연결할 때 나는 그런 일을 info.log 파일에 표시됩니다 를 ======= SESSION 이용 가능한 ========= 2017년 3월 29일 14시 27분 1초 .CustomPresenceEventListener - USER : 25

2017년 3월 29일 14시 27분 1초 .CustomPresenceEventListener -

그리고 난의 Openfire 로그가 될 것입니다 떠날 때 : ======= SESSION UNAVAILABLE =========를 2017년 3월 29일 14시 27분 34초 .CustomPresenceEventListener - USER : 25

을 2017.03.29 14:27:34 .CustomPresenceEventListener -

사용자가 Openfire를 입력하거나 나가면 원하는 동작을 추가 할 수 있습니다.

관련 문제