首页 > 代码库 > 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); }