首页 > 代码库 > Community Server Toolkit(2)

Community Server Toolkit(2)

3、Community Events服务:用来监听群体服务器中发生的各种事件,如某个服务的启停,某个应用是否准备好,某个用户是否在线或者状态是否发生了变化。

如果为CommunityEventsService组件添加各种监听器,则可以监听到各种事件。

A、添加UserLoginListener,则当用户登录或者登出到Sametime时该CommunityEventsService会发送通知。

当用户登录时,userLoggedIn()方法会被调用;当用户登出时,userLoggedOut()方法会被调用。

B、添加UserLoginFailedListener,则当用户登录失败时,userLoginFailed()方法会被调用。

C、添加UserStatusListener,则当用户的在线状态发送变化时,userStatusChanged()方法会被调用。

D、添加UserPrivacyListener,则当用户的私人列表发生变化时,userPrivacyListChanged()方法会被调用。

E、添加UserOnlineListener,则当用户上线,即第一个应用登录时userOnline方法被调用。当用户离线,即最后一个应用退出时userOffline被调用。

F、添加UserStorageListener,则当用户改变了他的storage时userStorageChanged方法被调用。

G、添加ServiceAvailableListener,则当某个服务启动时serviceAvailable()方法被调用,当某个服务停止时,serviceUnvailable()方法被调用。

H、添加CommunityEventsServiceListener,则当CommunityEvents服务生效时,serviceAvailable()方法被调用,当CommunityEvents服务失效时serviceUnavailable()方法被调用。

例如一个监听用户登录失败的SA可以这样实现:::

1)、首先加载CommunityEventsService组件,以SA的方式登录。

ServerAppService m_saService = (ServerAppService)m_session.getCompApi(ServerAppService.COMP_NAME);CommunityEventsService m_ceService = (CommunityEventsService)m_session.getCompApi(CommunityEventsService.COMP_NAME);
m_saService.addLoginListener( this);        
short loginType = STUserInstance.LT_SERVER_APP;
Connection[] connections = {new SocketConnection(1516, 17000),};
m_saService.setConnectivity(connections);
m_saService.loginAsServerApp( serverName, loginType, "Hacker Catcher", null);   

 2)等待直到Community Events Service服务生效,添加CommunityEventsServiceListener,当其serviceAvailable方法被调用时则服务生效。我们可以再LoginListener的loggedIn方法中添加CommunityEventsServiceListener。

    public void loggedIn(LoginEvent event)	    {       m_ceService.addCommunityEventsServiceListener(this);    }    public void loggedOut(LoginEvent event)	    {		        m_ceService.removeCommunityEventsServiceListener(this);	    }

 3)当Community Events Service服务生效时,其serviceAvailable方法被调用,我们在该方法中添加UserLoginFailedListener

	public void serviceAvailable(CommunityEventsServiceEvent event)	{		System.out.println("************** Start recording *************");							m_ceService.addUserLoginFailedListener(this);	}        public void serviceUnavailable(CommunityEventsServiceEvent event)	{		System.out.println("************** finish recording *************");		m_ceService.removeLoginFailedListener(this);	}

 4)当用户登录失败时,userLoginFailed方法会被调用,在这个方法中实现处理代码。

	public void userLoginFailed(UserLoginFailedEvent event)	{		String s = new String("login failed:");		s += " Name=" + event.getLoginName();		s += ", ip=" + event.getLoginIp();		s += ", type=" + Integer.toHexString(event.getLoginType());		s += ", reason=" + Integer.toHexString(event.getReason());				System.out.println(s);	}