在应用程序中存储共享对象的方法在接口ISharedObjectService中定义。当在服务端脚本里处理共享对象时,要特别注意他们被创建的范围。当一个房间被创建的时候为了去创建一个新的共享对象,你可以在你的应用程序里面重写方法roomStart:
Import org.red5.server.adapter.ApplicationAdapter; Import org.red5.server.api.IScope; Import org.red5.server.api.so.ISharedObject;
Public class SampleApplication extends ApplicationAdapter{ Public Boolean roomStart(IScope room){ If(!super.roomStart(room)) Return false; createSharedObject(room,”sampleSO”,true); ISharedObject so=getSharedObject(room,”sampleSO”); //Now you could do something with the shared object..现在你可以用这个共享对象作一些事情。 Return true; } |
每次当第一个用户一个应用程序房间,例如:通过rtmp://server/application/room1,一个共享对象sampleSO被服务创建。
如果一个连向主程序的共享对象要是被创建,例如rtmp://server/application,相同的操作在方法appStart中被执行。
一个共享对象提供的更多方法的信息请参考接口ISaredObjec的API文档。
为了得到共享对象的改变通报类似fcs/fms的onSync,监听器必须继承接口ISharedObjectListener.
Import org.red5.server.api.so.ISharedObject; Import org.red5.server.api.so.ISharedObjectListener;
Public class SampleSharedObjectListener implements ISharedObjectListener { Public void onSharedObjectUpdate(ISharedObject so,String key,Object value) { //共享对象so的属性<key> //被修改成<value> } Public void onSharedObjectDelete(ISharedObject so,String key){ { //共享对象so的属性为<key〉的被删除 } Public void onSharedObjectSend(ISharedObject so,String method,List params) { //共享对象so的方法<method>被呼叫带有参数<params> } //其他的方法在接口里被描述 } |
此外,监听在共享对象里必许获得注册。
ISharedObject so=getSharedObject(scope,”sampleSO”); So.addSharedObjectListener(new SampleSharedObjectListener()); |
应用程序代码里的改变
一个共享对象也能被服务端改变。
ISharedObject os=getSharedObject(scope,”sampleSO”); So.setAttribute(“fullname”,”Sample user”); |
这里所有被署名的客户端得属性新建和改变最好作为注册句柄被通报。
如果关于共享对象的若干动作在一个客户端更新事件中被结合,方法beginUpdate和endUpdate必须被用到:
ISharedObject so=getSharedObject(scope,”sampleSO”); So.beginUpdate(); So.setAttribute(“One”,” 1”); So.setAttribute(“Two”,”2”); So.removeAttribute(“Three”); So.endUpdate(); |