使用ivx连接组件实现私聊模型的经验总结

在一些案例中我们需要实现应用之间的数据即时共享,比如聊天室或者需要互动的多人游戏等。在ivx中我们是通过连接组件实现这种多个设备之间的信息传递功能的,今天结合一个私聊模型来讲一讲连接组件的具体使用方法。

一.连接

首先简单介绍一下连接组件,我们在对象树里选中前台即可添加一个连接,可以看到它只有一个属性就是它的SID码,这也是它的唯一标识。

1.用户

登录连接的每个用户可以设置自己的用户ID、昵称和头像,登录成功后会收到一个CID码作为该用户的唯一标识。同时,连接组件也可以监听到用户的加入和离开并返回实时结果。

2.房间

用户可以创建房间,但是需要填写房间ID,而且此ID会作为房间的唯一标识,在加入、退出、关闭房间和发送房间消息时都需要指明房间ID。

3.发送和接收消息

用户可以发送个人、房间和全局三种消息,发送个人消息时必须指明接收用户的CID码,而发送房间/全局消息会发送给当前房间/连接内的每一位用户(包括发送者自己)。此外,连接中可以一次发送多条消息,每条消息用不同的消息名称加以区分。

在接收消息时可以得到参数“消息内容”,它是包含整条消息的集合,我们可以在后面添加上发送消息时填入的名称作为后缀选取其中的某一条,此外我们还可以获取发送者的CID、用户ID、昵称和头像。

二.私聊模型

1.数据

在这个模型中共有五个参数,通用变量“我的信息”和“选中好友”分别用于存放当前用户和正在对话的好友的CID、昵称和头像;对象数组“好友列表”则用来存放全部好友信息,而且加了一个字段“红点”用来判断是否有未读消息,而对象数组“当前消息列表”和“总消息列表”则分别存放正在对话的好友消息记录和所有好友的消息记录,可以看到它俩的结构是一致的,其中布尔值字段“我的消息”为1说明这条消息是当前用户发给对方的,反之说明是由对方发送的。

2.前台

在前台初始化时我们会获取当前在线用户列表并赋值给“好友列表”,下图中可以看到调试记录里的打印结果,序号为0的元素里面就是之前已经登录的一个用户的信息,序号为1的元素其实就是当前用户,不过由于当前用户还没完成登记,所以暂时只分配了一个CID。(即连接获取在线用户列表时会获取用户自己和没有进行登记的用户)

3.登记页面

登记页面中我们可以上传头像、输入昵称,点击chat按钮就会在连接中进行登记,登记成功后会把当前用户的CID、头像和昵称保存在“我的信息”中,然后使用连接组件发送一条全局消息,包含“类型”,“昵称”和“头像”三部分内容。对应要给连接添加收全局消息的事件,并且当接收到的全局消息的“类型”值为“新用户”时,在“好友列表”中添加一条数据,包括直接获取的发送者CID和“消息内容”中的“头像”与“昵称”。

4.聊天页面

聊天页面可以分为四部分:左侧放置的是当前用户的头像,图片组件已经与“我的信息”进行了数据绑定;中间是联系人列表;右上方是正在对话好友的消息列表;右下方则用来输入并发送消息。

其中联系人列表是依据“好友列表”循环创建的,for容器下添加了两个if容器用来分别将当前用户自己和没有昵称的用户筛除,当用户点击选中一个好友时会将该好友的信息存到“选中好友”中,并且从“总消息列表”中将与该好友的对话记录筛选输出到“当前消息列表”。

联系人列表中还用绝对定位容器做了一个红点的展示效果,它的可见属性进行了数据绑定,只有在当前数据的“红点”为1时可见,这部分的逻辑是当连接收到一条个人消息会先将该消息存入“总消息列表”,然后判断消息来源的CID是否为正在对话的“选中好友”,如果是就将该消息再添加到“当前消息列表”;如果不是就从“好友列表”中找到该CID对应的好友,把“红点”字段置1,使该好友在列表中显示红点,标记有消息未读。

前面已经说过选中一个好友后会从“总消息列表”中将与该好友的对话记录筛选输出到“当前消息列表”,右上方就是根据“当前消息列表”循环创建展示出聊天记录的,而且这里if容器会通过每条消息中字段“我的消息”的值选择不同的展示效果。

最后是点击右下方的send按钮,这里连接会通过“选中好友”中的CID确认发送对象,将输入内容发送给对方后,我们需要在“总消息列表”和“当前消息列表”中都添加这条消息的记录,而且将“我的消息”这一字段设置为1。

总结

连接的使用中,首先要注意的就是事件的对应,案例中有通过连接发送消息的动作,那么就要在连接中添加对应的接收消息的事件,否则通讯就是没有意义的。还有就是连接中无论发送个人消息还是房间消息都需要唯一标识,所以要设置好案例中数据的字段结构,尽量清晰明了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354