首页 > 代码库 > Community Server Toolkit
Community Server Toolkit
1、服务端程序(SA)登录注册或退出:
首先加载ServerAppService组件,然后调用loginAsServerApp(host,loginType,appName,serviceTypes)登录并注册服务。SA程序一旦注册了某服务,则意味着该SA程序负责相关服务的处理过程。群体内其他程序对该服务的请求则会被自动送来。
目前,服务端程序(SA)需要通过1516端口连接Sametime服务器,所以在登录前必须使用setConnectivity()来设置网络连接参数。
ServerAppService m_saService = (ServerAppService)m_session.getCompApi(ServerAppService.COMP_NAME);Connection[] connections = {new SocketConnection(1516, 17000),};m_saService.setConnectivity(connections);m_saService.loginAsServerApp( serverName, loginType, "Hacker Catcher", null);
2、Channel服务:客户端到服务端通信或者服务端到服务端通信由Channel服务完成。
A、通信双方都需要加载ChannelService组件。
STSession session = new STSession("ChannelServiceClient"+this);String [] compNames = {ChannelService.COMP_NAME,CommunityService.COMP_NAME};session.loadComponents(compNames);session.start();ChannelService channelService=(ChannelService)session.getCompApi(ChannelService.COMP_NAME);
B、主动方利用Channel服务的createChannel()创建通道,新创建的通道需要调用open()将其打开并建立连接。
Channel channel = channelService.createChannel(SERVICE_TYPE, 0, 0, EncLevel.ENC_LEVEL_ALL, null, null); channel.open();
被动方使用addChannelServiceListener()添加监听器。当主动方调用open()时,被动方的channelReceived()方法会被自动调用,在此方法中根据情况决定接受(accept())、关闭(close())或挂起(pend())通道。挂起的通道可以后续调用accept()或close()来打开或关闭。或调用getCreateData()方法获得主动方创建通道时的握手数据(即createChannel方法中的第5个参数)。
1 channelService.addChannelServiceListener(this); 2 public void channelReceived(ChannelEvent event) { 4 Channel channel = event.getChannel(); 5 channel.addChannelListener(this); 6 if(channel.getServiceType()==SERVICE_TYPE) 7 channel.accept(EncLevel.ENC_LEVEL_ALL, null); 8 else 9 channel.close(STError.ST_OK, null);10 11 }
C、accept后通道建立,通道以全双工方式运行,双方都可以通过sendMsg方法发送消息。接收方需要事先调用addChannelListener添加一个监听器,这样,当消息送达时接收方的channelMsgReceived方法将被自动调用,另外当通道打开时接收方的channelOpened方法会被调用,打开失败时channelOpenFailed方法会被调用,通道关闭时channelClosed方法会被调用。
发送方:
channel.sendMsg((short)1, "My Message".getBytes(), true);
接收方:
Channel channel = event.getChannel(); channel.addChannelListener(this);
public void channelMsgReceived(ChannelEvent event) { System.out.println("MsgType = "+event.getMessageType()); System.out.println("Data = "http://www.mamicode.com/+new String(event.getData())); }