• web 直播&即时聊天------阿里云、融云(二)


    上一篇简要主要介绍了融云制作聊天室的基本方法,这次基本属于对上一篇的补充以及进阶...^_^...

    (ps:吐槽一下,加了三个融云的线下qq群,全部没人解决问题,也不知道建此群的意义,若是民间的话就当我没说,若是融云的工作人员的话,那这做的确实有些糙。反正我是那种给我文档我可能还要懵B的人,而且web这一块的文档真心不算很友好!!!)

    根据需求,聊天室已经创建出来了,可是需求不会一成不变,上面又下达了需要根据直播人的行为来改变观看人状态的事(简单点说就是,直播的点一个按钮,看直播的这边即时增加一个按钮出来)

    了解需求后,首先想到的是创建长连接来达成,可后来发现利用融云的消息监听功能可以不错的完成这个功能。

    1.小灰条

    官方给出的是这样的,然后我就

    var msg = new InformationNotificationMessage('小灰条');
    RongIMClient.getInstance().sendMessage(conversationType,targetId, msg, {
        onSuccess: function (message) {
            // do something...
        },
        onError: function (errorCode) {
         // do something... } })

    so:

    然后又去api里查也没有给出个方法,不过最后还是找到类似的方法,替换下方法名即可。

    var msg = new RongIMLib.InformationNotificationMessage({"message": "命令"});
    var conversationtype = RongIMLib.ConversationType.CHATROOM;//聊天室
    var targetId = "xxx"; // xxx聊天室Id
    RongIMClient.getInstance().sendMessage(conversationType,targetId, msg, {
        onSuccess: function (message) {
            // do something...
        },
        onError: function (errorCode) {
         // do something...
        }
    })

    之后在消息监听器中找到对应方法进行事件处理

    // 消息监听器
    RongIMClient.setOnReceiveMessageListener({
        // 接收到的消息
        onReceived: function (message) {
            // 判断消息类型
            switch(message.messageType){
                case RongIMClient.MessageType.TextMessage:
                    // 发送的消息内容将会被打印
                    //console.log(message.content.content);
                       console.log('收到发送的消息')
                    break;
                case RongIMClient.MessageType.VoiceMessage:
                    // 对声音进行预加载                
                    // message.content.content 格式为 AMR 格式的 base64 码
                    RongIMLib.RongIMVoice.preLoaded(message.content.content);
                    break;
                case RongIMClient.MessageType.ImageMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.DiscussionNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.LocationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.RichContentMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.DiscussionNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.InformationNotificationMessage:
                    // do something...
                    console.log('收到小灰条信息')
                    break;
                case RongIMClient.MessageType.ContactNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.ProfileNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.CommandNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.CommandMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.UnknownMessage:
                    // do something...
                    break;
                case RongIMClient.RegisterMessage.PersonMessage:
                    // do something...
                    break;
                default:
                    // 自定义消息
                    // do something...
                    
            }
        }
    });

    2.自定义消息

    自定义消息官方还是给了足够多的解释的,这里就简单梳理一下

    首先,创建消息

    //创建消息
    var messageName = "PersonMessage"; // 消息名称。
    var objectName = "s:person"; // 消息内置名称,请按照此格式命名。
    var mesasgeTag = new RongIMLib.MessageTag(true,true);// 消息是否保存是否计数,true true 保存且计数,false false 不保存不计数。
    var propertys = ["name","age"]; // 消息类中的属性名。
    RongIMClient.registerMessageType(messageName,objectName,mesasgeTag,propertys);
    var conversationType = RongIMLib.ConversationType.CHATROOM; //聊天室,其他会话选择相应的消息类型即可。
    var targetId = "xxx"; // 想获取自己和谁的历史消息,targetId 赋值为对方的 Id。

    之后,在事件中触发

    //发送消息
        var msg = new RongIMClient.RegisterMessage.PersonMessage({name:"zhang",age:12});
        RongIMClient.getInstance().sendMessage(conversationType,targetId, msg, {
            onSuccess: function (message) {
            },
            onError: function (errorCode) {
            }
        })

    这里需要注意的是,不仅需要在直播方创建消息,在观看方同样需要创建,而上面说到的小灰条则只在直播方或者管理者创建就可以...

    发送完信息后,接受信息的地方同时需要更改

    // 消息监听器
     RongIMClient.setOnReceiveMessageListener({
        // 接收到的消息
        onReceived: function (message) {
            // 判断消息类型
            switch(message.messageType){
                case RongIMClient.MessageType.TextMessage:
                       // 发送的消息内容将会被打印
                    //console.log(message.content.content);
                     $('.list').prepend('<li>'+message.content.content+'</li>');
                     console.log('收到信息')
                    break;
                case RongIMClient.MessageType.VoiceMessage:
                    // 对声音进行预加载                
                    // message.content.content 格式为 AMR 格式的 base64 码
                    RongIMLib.RongIMVoice.preLoaded(message.content.content);
                    break;
                case RongIMClient.MessageType.ImageMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.DiscussionNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.LocationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.RichContentMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.DiscussionNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.InformationNotificationMessage:
                    // do something...
                    
                    console.log('收到小灰条')
                    break;
                case RongIMClient.MessageType.ContactNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.ProfileNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.CommandNotificationMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.CommandMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.UnknownMessage:
                    // do something...
                    break;
                case RongIMClient.MessageType.PersonMessage:
                    // do something...
                    //这里看清上面是PersonMessage,即创建消息时候所创建的消息名称
                    console.log('自定义消息')
                    break;
                default:
                    // 自定义消息
                    // do something...
            }
        }
    });

    基本上就是这些了,如果在阅读过程中遇到任何问题,欢迎指正...

     本文地址:http://www.cnblogs.com/bbbiu/p/6895016.html

    上一篇: web 直播&即时聊天------阿里云、融云

    小人持器,叫嚣不停;君子藏器,待机而动;国有利器,不示于人

  • 相关阅读:
    oracle 11g 更改字符集,9i导入11g 出现 ORACLE 错误 12899 处理
    使用XUACompatible来设置IE浏览器兼容模式
    server2008中如何关闭internet explorer增强的安全配置
    oracle修改密码
    ORA28000: the account is locked的解决办法
    C#与word
    Javascript 使用大全
    双机热备、集群及高可用性入门(转载 rdxx.com)
    table画细线
    CSS总结
  • 原文地址:https://www.cnblogs.com/bbbiu/p/6895016.html
Copyright © 2020-2023  润新知