Openmeetings4.0.0二次开发日志(三)使用webservice调用OM接口(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoroduyu/article/details/78758932

今天这篇博客接着把上周没讲完的两个需求讲完。上周讲到webservice调用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("[email protected]");
        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("[email protected]");
        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("对不起当前没有空闲房间,请等待!");
            serviceRs.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的研究我这边依然在跟进,以后有时间大概会出一些关于性能测试的源码分析的文章。同时我也在学习一些关于集群和大数据方面的知识,以后我都会陆续分享出来,喜欢学习,喜欢代码的童鞋可以一起学习进步哦。

猜你喜欢

转载自blog.csdn.net/zoroduyu/article/details/78758932