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