Openmeetings4.0.0二次开发日志(三)使用webservice调用OM接口(2)
2017-12-09 15:42
405 查看
今天这篇博客接着把上周没讲完的两个需求讲完。上周讲到webservice调用Openmeetings的接口,并假定了有这么几个需求:
现在有老师这个角色,他可以越过登录页面直接进入Openmeetings的公共房间。
老师也可以创建自定义的会议房间
有学生这个角色,学生没有自主进入公共房间或者创建房间的权限,但他可以被随意分配到一个老师创建的房间进行面试。如果当前没有空闲的房间,则需要等待。
上周我已经给出了全部的源代码并且讲解了第一个需求的实现,现在继续完成后面两个。
先看代码:
先看需要传入的参数:
id : 传入的外部人员的id
fname : 传入的外部人员的姓
lname : 传入外部人员的名字
ty : 传入的房间的类型,openmeetings的房间分为三种:会议房间,演示房间,采访房间。这里需要传入conference,presentation,interview中的一种。
num : 所创建房间的最大人数。
代码往下走,首先还是用一个内部用户登录取得sid这个通行证,然后创建一个RoomDTO类,用于存放房间的某些参数信息。room.setType(Type.fromValue(ty))先设置了设置房间的类型,room.setCapacity(num);设置了房间的最大人数room.setAllowRecording(true);设置了是否允许录制。然后调用roomService的add方法添加房间。注意,这里添加的房间在添加后是存入数据库永久存在的房间,并非关闭之后就删除的临时房间。然后就是创建外部人员信息,之前说过这里不再说了。然后设置进入房间的选项,将房间id设置为我们刚刚创建的房间的id。在得到进入房间的id后,我们将它存入一个全局的静态变量map中保存起来,存入相应的房间号和当前人数,为下面一个需求做准备。后台写完了,来看看效果。
前台代码:
由于本人平时写后台比较多,这里重在首先功能,前端页面就写得简单粗暴了一点,望各位见谅。
在点击创建自定义房间后,如下图,则进入房间成功:
那现在再来看第三个需求:
有学生这个角色,学生没有自主进入公共房间或者创建房间的权限,但他可以被随意分配到一个老师创建的房间进行面试。如果当前没有空闲的房间,则需要等待。
还是先看代码:
这里前台传入的参数很简单,只需要传入学生的id和名字就行。进来之后前两步还是先拿到sid和创建外部用户信息。然后new了一个list,把roomCountersMap的key值信息存入这个list,roomCountersMap再讲上一个需求时我提到过,是一个存放老师创建房间的id和当前人数的map集合,这里我们拿到所有的key实际上就是拿到了当前被老师创建的所有房间的id号。然后调用roomService.counters(sid, list)方法,传入sid和当前所有的房间号,返回给我们一个存放房间信息的list集合,这里面的房间就是我们传了房间id的那些房间。接下来设置一个变量roomId为0。遍历这个房间的list集合,如果,当前房间人数为1,则视该房间为空闲房间,取得该房间的id赋给rooid,然后跳出循环。进行判断,如果roomId为0,则说明当前没有空闲房间,返回给用户提示。如果不为0,则说明有空闲房间,设置进入房间的选项,返回得到的密钥。
最终效果展示如下:
先由一个老师创建一个房间:
然后一个学生随机分配房间:
进入到刚才老师创建的房间中:
这时假如再来一个学生,则会提示房间已满:
至此,之前提出的需求已全部实现完成。
对openmeetings的研究我这边依然在跟进,以后有时间大概会出一些关于性能测试的源码分析的文章。同时我也在学习一些关于集群和大数据方面的知识,以后我都会陆续分享出来,喜欢学习,喜欢代码的童鞋可以一起学习进步哦。
现在有老师这个角色,他可以越过登录页面直接进入Openmeetings的公共房间。
老师也可以创建自定义的会议房间
有学生这个角色,学生没有自主进入公共房间或者创建房间的权限,但他可以被随意分配到一个老师创建的房间进行面试。如果当前没有空闲的房间,则需要等待。
上周我已经给出了全部的源代码并且讲解了第一个需求的实现,现在继续完成后面两个。
先看代码:
@ApiOperation(value = "老师创建自定义房间") @RequestMapping(value = "/customizeRoom", method = RequestMethod.POST) public ServiceResult customizeRoom(String id, String fname, String lname, String ty, long num) throws RemoteException { // 得到sid String sid = getSid("duyu", "Dy@@2017"); //新建房间 RoomDTO room = new RoomDTO(); room.setType(Type.fromValue(ty)); room.setCapacity(num); room.setAllowRecording(true); room = roomService.add(sid, room); // 创建外部人员访问信息 ExternalUserDTO user = new ExternalUserDTO(); user.setEmail("zda@dwa.com"); user.setExternalId(id); user.setExternalType("Teacher"); user.setFirstname(fname); user.setLastname(lname); user.setLogin("T" + id); //设置进入房间的选项 RoomOptionsDTO options = new RoomOptionsDTO(); options.setRoomId(room.getId()); options.setShowAudioVideoTest(true); options.setModerator(true); //得到进入房间的密钥 ServiceResult serviceRs = userService.getRoomHash(sid, user, options); System.out.println(serviceRs.getMessage()); //将当前创建的房间信息存入map中保存 roomCountersMap.putIfAbsent(room.getId(), 1); return serviceRs; }
先看需要传入的参数:
id : 传入的外部人员的id
fname : 传入的外部人员的姓
lname : 传入外部人员的名字
ty : 传入的房间的类型,openmeetings的房间分为三种:会议房间,演示房间,采访房间。这里需要传入conference,presentation,interview中的一种。
num : 所创建房间的最大人数。
代码往下走,首先还是用一个内部用户登录取得sid这个通行证,然后创建一个RoomDTO类,用于存放房间的某些参数信息。room.setType(Type.fromValue(ty))先设置了设置房间的类型,room.setCapacity(num);设置了房间的最大人数room.setAllowRecording(true);设置了是否允许录制。然后调用roomService的add方法添加房间。注意,这里添加的房间在添加后是存入数据库永久存在的房间,并非关闭之后就删除的临时房间。然后就是创建外部人员信息,之前说过这里不再说了。然后设置进入房间的选项,将房间id设置为我们刚刚创建的房间的id。在得到进入房间的id后,我们将它存入一个全局的静态变量map中保存起来,存入相应的房间号和当前人数,为下面一个需求做准备。后台写完了,来看看效果。
前台代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <style> #div1{ position: absolute;left: 40% } </style> <br> <br> <body> <div id="div1"> 请输入姓名:<input id="name" type="text"> <br><br> 请输入id号:<input id="id" type="number"><br><br> 请选择创建房间的类型:<select id="ty"> <option value="conference">会议房间</option> <option value="presentation">演示房间</option> <option value="interview">面试房间</option> </select><br><br> 请输入房间的最大人数:<input type="number" id="maxNum"> <br><br> <button onclick="createRoom()" >老师创建自定义房间</button> <br> <br> <!-- 请选择要进入的房间号:<input id="num" type="number"> <br> <br> <button onclick="addToRoom()" >老师加入公共房间</button> </div> --> </body> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> function addToRoom(){ var dto = { id:$("#id").val(), fname:$("#name").val(), roomId:$("#num").val() } $.post("/op/addToRoom",dto,function(data){ window.location.href="http://localhost:5080/openmeetings/hash?secure="+data.message },"json") } function createRoom(){ var dto = { id:$("#id").val(), fname:$("#name").val(), ty:$("#ty").val(), num:$("#maxNum").val() } $.post("/op/customizeRoom",dto,function(data){ window.location.href="http://localhost:5080/openmeetings/hash?secure="+data.message },"json") } </script> </html>
由于本人平时写后台比较多,这里重在首先功能,前端页面就写得简单粗暴了一点,望各位见谅。
在点击创建自定义房间后,如下图,则进入房间成功:
那现在再来看第三个需求:
有学生这个角色,学生没有自主进入公共房间或者创建房间的权限,但他可以被随意分配到一个老师创建的房间进行面试。如果当前没有空闲的房间,则需要等待。
还是先看代码:
@ApiOperation(value = "给学生随机分配面试房间") @RequestMapping(value = "/randomToRoom", method = RequestMethod.POST) public ServiceResult randomToRoom(String id, String fname, String lname) throws RemoteException { ServiceResult serviceRs; // 用户登录,获取sid String sid = getSid("root", "Avie@2017"); // 创建外部人员访问信息 ExternalUserDTO user = new ExternalUserDTO(); user.setEmail("zda@dwa.com"); user.setExternalId(id); user.setExternalType("student"); user.setFirstname(fname); user.setLastname(lname); user.setLogin("S" + id); // 取得所有开启的房间号,然后查询每个房间号的人数,如果有房间人数为1的房间,则视为空闲房间,可以进入面试 List<Long> list = new ArrayList<Long>(); Set<Long> set = roomCountersMap.keySet(); list.addAll(set); List<RoomCountDTO> rooms = roomService.counters(sid, list); Long roomId = (long) 0; for (RoomCountDTO room : rooms) { if (room.getRoomCount() == 1) { roomId = room.getRoomId(); break; } } if (roomId == 0) { serviceRs = new ServiceResult(); serviceRs.setMessage("对不起当前没有空闲房间,请等待!"); serv b072 iceRs.setType("noRoom"); return serviceRs; } RoomOptionsDTO options = new RoomOptionsDTO(); options.setRoomId(roomId); options.setShowAudioVideoTest(true); options.setModerator(false); serviceRs = userService.getRoomHash(sid, user, options); System.out.println(serviceRs.getMessage()); return serviceRs; }
这里前台传入的参数很简单,只需要传入学生的id和名字就行。进来之后前两步还是先拿到sid和创建外部用户信息。然后new了一个list,把roomCountersMap的key值信息存入这个list,roomCountersMap再讲上一个需求时我提到过,是一个存放老师创建房间的id和当前人数的map集合,这里我们拿到所有的key实际上就是拿到了当前被老师创建的所有房间的id号。然后调用roomService.counters(sid, list)方法,传入sid和当前所有的房间号,返回给我们一个存放房间信息的list集合,这里面的房间就是我们传了房间id的那些房间。接下来设置一个变量roomId为0。遍历这个房间的list集合,如果,当前房间人数为1,则视该房间为空闲房间,取得该房间的id赋给rooid,然后跳出循环。进行判断,如果roomId为0,则说明当前没有空闲房间,返回给用户提示。如果不为0,则说明有空闲房间,设置进入房间的选项,返回得到的密钥。
最终效果展示如下:
先由一个老师创建一个房间:
然后一个学生随机分配房间:
进入到刚才老师创建的房间中:
这时假如再来一个学生,则会提示房间已满:
至此,之前提出的需求已全部实现完成。
对openmeetings的研究我这边依然在跟进,以后有时间大概会出一些关于性能测试的源码分析的文章。同时我也在学习一些关于集群和大数据方面的知识,以后我都会陆续分享出来,喜欢学习,喜欢代码的童鞋可以一起学习进步哦。
相关文章推荐
- Openmeetings4.0.0二次开发日志(三)使用webservice调用OM接口(1)
- 使用jdk开发webservice接口以及调用
- 使用Axis2开发webservice服务端接口+axis开发的客户端调用
- 在windows下使用gSOAP技术调用WebService,使用vc开发
- 怎样使用VC调用webservice的接口
- android使用ksoap2调用webservice接口实现电话号码查询功能
- 使用xfire方式调用webservice接口
- 【SSI开发总结.10】eclispe中使用XFire框架调用WebService
- Java使用XFire调用WebService接口
- EJBCA开发 webService接口调用
- 开发日志:onclick调用js方法传递多个使用struts标签获取的参数
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- Android开发中webService接口调用示例
- 不使用VS.NET集成开发环境,调用微软的WebService注册
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- 各种开发语言示例调用WebService接口
- 使用c++开发客户端调用XML-RPC 接口
- C++调用gSoap编写的WEBSERVICE与C#.NET间接口自定义结构体不能重复使用