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
小人持器,叫嚣不停;君子藏器,待机而动;国有利器,不示于人
posted on 2017-05-23 17:16 bling_bling 阅读(2436) 评论(0) 编辑 收藏 举报