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

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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Openmeetings提供视频会议,即时消息,白板,协作文档编辑和其他组件软件工具。它使用Media Server的API函数进行远程和流媒体Kurento。 OpenMeetings是一个多语言可定制的视频会议和协作系统。它支持音频、视频,能让你查看每个与会者的桌面。OpenMeetings还包含一个白板,通过白板可以导入各种格式的图片和涂鸦。 功能细节: 音频和视频会议 有四个使用OpenMeetings音频/视频功能的选项,您可以在会议期间选择它们。 音频+视频 仅音频 仅视频 仅图片 另外,您可以更改视频/音频质量,选择多个摄像机分辨率(4:3、16:9或3:2),然后选择输入设备。 会议录制和屏幕共享 录制的会议包含一切内容,包括从所有音频流中录制的声音,完全按照您在会议中看到的方式进行。 录制的会话可以下载为AVI / FLV文件。 可以选择共享的屏幕区域。 屏幕共享的不同质量步骤。 在集成的拖放文件资源管理器中观看和整理录音 文件管理器 每个会议室都有高级File-Explorer,拖放界面用于管理上载的文件,包括使用文件夹创建文档树的可能性。 File-Explorer中的私有和公共驱动器。File-Explorer有两个不同的视图,一个是Private Drive,另一个是Public Drive。专用驱动器始终包含相同的文件。这些文件仅对当前登录的用户可见。公共驱动器不与用户绑定,而是与会议室绑定。会议室中的所有用户都可以访问公共驱动器。 审核系统 在会议期间,主持人可以针对每个用户分别调整用户权限。  允许/拒绝审核  允许/拒绝权利在白板上绘画  添加/删除演示者角色  允许/拒绝屏幕共享/记录屏幕  允许/拒绝远程控制屏幕  允许/拒绝“静音其他人”权限  让其他用户静音时让一个用户讲话  允许/拒绝视频  允许/拒绝音频 Multi白板和聊天 在Multi白板中,您可以添加新的白板实例,每个白板中都可以包含所有工具和文档。 保存白板。您可以将每个白板实例另存为一个文件。该文件位于File-Explorer中,可以再次拖放到白板上,并且可以像其他任何文档,图像或文件夹一样组织。 带有绘图,书写,拖放,调整大小,图像(来自File-Explorer的拖放),Symbol / sCliparts的白板。 Full-fit确实会重新缩放屏幕上的文档,使其在所有屏幕上均100%可见,无论不同用户使用哪种屏幕分辨率。 您可以导入各种文档格式(PDF,DOC,ODT,PPT等) 用户和房间管理 您可以在单个OpenMeetings实例中管理用户和多个组织。您还可以创建只能通过SOAP-API进行访问的用户。 MyRooms部分。默认情况下,每个用户都有2个私人房间,该房间始终仅供该用户访问。有一些按钮可从仪表板进入这些房间。 您可以将会议室分配给所有用户,也可以仅将它们分配给特定的用户组。 私人留言中心 向用户发送消息并将其组织在文件夹中。您可以通过发送私人消息预订会议室。预订的活动将自动出现在您和参与者的日历中,对该活动的更改将填充到预订该活动的所有用户中。 用户联系人,您可以搜索用户并将其添加到您的联系人中。您甚至可以授予他们查看日历的权利。 使用集成的日历计划会议 计划您的会议并邀请OpenMeetings或External的与会者。 被邀请的与会者将收到一封包含会议详细信息的电子邮件,以及带有安全哈希表的会议室链接。 与您的联系人共享您的日历。 投票和投票 您可以使用是/否或1-10个问题创建民意调查,让用户投票并查看投票结果。 可以存储民意测验并将结果显示为饼图 后备 您可以将所有用户生成的数据(包括用户上传的文件)备份到一个ZIP文件中,然后将该ZIP导入到新安装的OpenMeetings中。 使用者介面: 翻译得到改善 邀请表显示客户所在时区的时间 使用JS Notification API显示通知 视频窗格的大小可以是固定的,并且可以按用户配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值