专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

鸿蒙上实现多人聊天功能

  本样例是基于即时通讯(简称IM)服务实现的OpenHarmony应用。
  该应用允许两人或多人使用互联网即时地传递文字、图片、文件、语音、emoji等讯息,可应用于各类聊天场景,为人们带来更加及时高效的通讯体验。
  此外即时通讯平台具备较高的定制化特点,适用于多种行业,客户可以根据自己的需求来定制,实现即时通讯的内部私有化。
  设备端:DAYU200(RK3568)开发板OpenHarmony3。1release系统
  即时通讯实现原理
  如下图:
  想要实现多个设备之间的无障碍即时通讯,需要多台终端设备、终端应用和服务器配合一起使用。
  首先应该将终端应用安装到终端设备上,用户通过应用向服务器申请注册账号。
  随后,用户可以通过账号进行查找,添加其他好友,并向好友发送文字、图片、文件、语音、emoji等讯息。
  用户发送的讯息会先送达服务器,由服务器判断其好友的状态(离线在线),然后选择发送或者暂时缓存消息等操作。
  最后,好友的终端应用接收到消息。
  实现即时通讯的设备需求:安装应用的终端设备、网络环境和云端服务器。
  前提条件:用户将应用安装在终端设备上,并且拥有注册账号,且需要通讯的用户也成功注册了账号并且添加了好友。
  通讯原理:用户在安装了应用的终端设备上编辑信息(文字、图片、文件、语音、emoji等),通过网络将消息发送至云端服务器。
  当对方用户在线时,云端服务器将把消息推送给对方用户,对方用户安装了应用的终端设备也将接收到信息。当对方用户不在线时,信息将被暂时缓存在云端服务器。
  4步实现多人即时通讯
  通讯功能是通过TCP协议实现的,我们将通讯接口connect()、send()、receive()的实现放置在CPP文件中,通过NAPI的方式对JS层暴露接口。
  如下:connect():客户端和服务器建立连接send():消息发送功能receive():消息接收功能建立TCP连接if(connect(sockcli,(structsockaddr)servaddr,sizeof(servaddr))0){napicreateint32(env,0,result);}else{napicreateint32(env,1,result);OHLOGINFO(LOGAPP,C接收线程启动);startRec();}发送消息if(send(sockcli,data,strlen(data),0)1){OHLOGINFO(LOGAPP,zjfsend():1);napicreateint32(env,0,result);}else{OHLOGINFO(LOGAPP,zjfsend():!1);napicreateint32(env,1,result);}接收消息getStep(queue0,sharedMessage);取出一条消息constcharcssharedMessage。cstr();换为char形式处理napivalueresult;napicreatestringutf8(env,cs,sharedMessage。length(),result);std::string()。swap(sharedMessage);清空字符串文件消息的发送与接收
  文件消息的发送与接收
  文件转发是即时通讯办公场景下的重要功能。样例中的文件功能支持文件消息的发送、接收和下载。
  用户通过点击聊天界面的按钮,选择文件按钮,完成本地文件的浏览,随后可以选择是否将文件发送给好友。
  这个功能的实现包括三个步骤:文件的选择文件上传到服务器文件的接收
  文件上传:文件的选择letfile1{filename:this。app。def。uidFILEURL,name:file,uri:FILEURL,type:fileType}letfileIdthis。guid();letdata{};letheader{filename:this。selectedFileName。toString()};文件上传到服务器request。upload({url:http:this。app。def。ipfilefileUpload?fileSignaturefileIduidthis。app。def。uidfileTypethis。app。def。chatData〔this。idx〕。unRead,header:header,method:POST,files:〔file1〕,data:〔data〕})。then((data){uploadTaskdata;uploadTask。on(headerReceive,functioncallback(headers){this。socketSendFile(fileId,timestamp);});})。catch((err){console。error(fileSelectFailedtorequesttheupload。Cause:JSON。stringify(err));})文件的接收letdownloadConfig{下载参数url:fileUrl,header:{},enableMetered:true,enableRoaming:true,filePath:datastorageel2basehapsentryfilesdownloadFileName,networkType:request。NETWORKWIFI}request。download(downloadConfig,(err,data){if(err){return;}downloadTaskdata;下载完成downloadTask。on(complete,functioncallback(){prompt。showToast({message:下载文件成功!,duration:1000,});});
  语音消息的发送与接收
  用户通过点击聊天界面的录制按钮,完成语音的录制,随后可以选择是否将语音发送给好友。
  这个功能的实现包括三个步骤:语音的录制语音上传到服务器语音的接收
  图片消息的发送与语音消息的发送步骤相同,文章中不再赘述。语音录制startRecorder(config,callback){if(typeof(this。audioRecorder)!undefined){this。audioRecorder。on(prepare,(){this。audioRecorder。start()})this。audioRecorder。on(start,(){callback()})this。audioRecorder。prepare(config)}else{logger。info({TAG}casefailed,audiorecorderisnull)}}录制好的语音文件的位置letsrcPathinternal:cachethis。mainData。file。wavletfile1{filename:this。app。def。uidthis。mainData。path,name:audio,uri:srcPath,type:wav};语音消息发送到服务器request。upload({url:myurl,header:header,method:POST,files:〔file1〕,data:〔data〕})。then((data){uploadTaskdata;uploadTask。on(headerReceive,functioncallback(headers){this。sendAudio(audioId)});uploadTask。on(progress,functioncallback(uploadedSize,totalSize){console。info(dialogPagesuploadtotalSize:totalSizeuploadedSize:uploadedSize);});})。catch((err){console。error(dialogPagesFailedtorequesttheupload。Cause:JSON。stringify(err));})语音的接收letdownloadConfig{下载参数url:item。content。path,header:{},enableMetered:true,enableRoaming:true,filePath:filePath,networkType:request。NETWORKWIFI}letdownloadTask;letthisthisrequest。download(downloadConfig,(err,data){if(err){return;}downloadTaskdata;下载完成downloadTask。on(complete,functioncallback(){letaudio{content:{path:filePath}}this。playAudio(audio)});
  emoji消息的发送与接收
  emoji是即时通讯软件不可缺少的一部分,可以更加生动地表现用户的聊天情感。
  在样例中,用户通过点击聊天界面的emoji按钮,即可找到目前应用内支持的所有样式的emoji,随后可以选择具体样式并将其发送给好友。引入emoji第三方组件elementnameemojiExpressionsrcc2021imgdataimg。jpgdatasrc。。。。commoncomponentsemojiExpressionemojiExpression。hmlelement第三方组件的展示布局textstyleleft:25fp;top:10fp;所有表情textemojiExpressionemojiExpression
  即时通讯功能总结
  本样例是基于OpenHarmony实现的即时通讯应用,目前已经支持文字、图片、文件、语音、emoji等讯息的快速发送与接收。
  除此之外还实现了好友的添加与删除、黑名单、安全登录、私聊群聊、个人信息设置(二维码头像等)等功能的全方面支持。
  代码地址:https:gitee。comisrcohosinstantmessageohos

宝山疾控话健康我们经常听到一句话,多喝牛奶才能长高,增加免疫力。牛奶含有我们人体中需要的优质蛋白钙和多种其它微量元素,可调节内分泌及肠道菌群微生态,在一定程度增强人体的免疫能力。还可以促进青少年肺结节到底能不能吃大虾?不想结节恶化,4种食物,尽量少碰近几年有不少人在体检的过程中被告知患上了肺结节,人们对于肺结节并不是特别的了解,但是一听到结节这两个字总是感觉到非常害怕。甚至还有一些人会不自觉地把肺结节与绝症联系到一起,其实肺结阳转阴后也别大意,用这果子熬汤喝,香甜营养还润喉,增强抵抗力最近的一个星期,对于很多朋友来说都非常的煎熬,那是因为大家都阳了,伴随着咳嗽高烧以及喉咙吞刀片的过程。虽然非常的难受,但是只要坚强地挺过去,接下来的日子还是非常美好的。也会有一些免马云放权,蚂蚁向前?图片来源Pixabay蚂蚁集团开始去马化。1月7日,蚂蚁科技集团股份有限公司(以下简称蚂蚁集团)发布公告称,公司主要股东投票权发生变化,从马云及其一致行动人共同行使股份表决权,调整我与招行的八年战争誓将抗争进行到底石辉今年,历经3年的新冠疫情迎来了最终的结果,但是我与招商银行的8年理财的抗战让人失望至极。招商银行坑了我,虽然监管部门在我的反复投诉举报及不断提供各种证据材料后,进行了多次调查,四川理塘县文旅体农商深度融合争创天府旅游名县来源原创稿写春联迎新年。理塘县委宣传部供图汇报演出现场。理塘县委宣传部供图汇报演出现场。理塘县委宣传部供图年关将至,四川省甘孜州理塘县大街小巷洋溢着欢乐祥和喜庆的氛围。据悉,为丰富国产首制大型邮轮将成全球首艘5G邮轮1月12日,中国船舶集团旗下中船嘉年华邮轮有限公司与中国电信股份有限公司上海分公司签订战略合作协议。双方将携手为中船嘉年华全新中国邮轮自主品牌爱达邮轮(AdoraCruises)旗数字化转型的一秒钟一秒钟可以干什么?数字化时代,当消费者在电商平台点下支付的一秒钟,后台完成了17亿次计算而就在这一秒钟里,有超过3000个快件进入到了寄递渠道一秒钟可以将5000个建筑施工项目数十新春走基层下沉一线解决用水难春节将至,巡察中群众反映的用水难问题一直萦绕在重庆市大足区委第三巡察组组长杨武洪心头。几天前,杨武洪一大早就和智凤街道党工委书记高笋村村干部相约在村口碰头。快过年了,群众反映的供水阴影中的少爷旅途离开豪宅后,维克多和西奥多乘车十五分钟到达岛上的港口,那里有一艘服务齐全的游艇在等着他们。登上游艇后,维克多坐在一个华丽的座位上,看着窗外的海浪,同时试图放松。过了一会儿,正在和船新年第一更!OPPOWatch3Pro上线微信手表版,体验更完善目前市面上智能手表的选择是越来越多了,在配置堆料上各家都有出众的地方。但是,系统生态就不一样了,这是连接着使用体验的一个重要因素,安卓智能手表阵营也因为不能适配微信软件而一直被吐槽
纵观全运会决赛上的表现,李盈莹的表现是不是优于张常宁呢?实事求是的讲,从女子排球大主攻的角度上看,李盈莹比张常宁要高一个档次!全运会上李盈莹表现确实优于张常宁。但二者之间差别不是很大,二人互补性强,都是优秀选手,李盈莹所在团队总体发挥强富士的相机怎么样?我是富士相机的用户。我认为富士相机主要有以下特点1。富士胶片株式会社主要是生产胶片起家的,所以他们也不忘记这些胶片的特点,在富士相机内置有十多种胶片模式,每一种胶片模式的色彩格调都目前全国最有投资价值的城市或城市圈有哪些?做为一个在上海与深圳都生活过多年的人,评价这两个城市。结论是上海完胜!1。教育上海有211和985大学共10所,运多于深圳(上海胜)2。经济上海GDP3。2万亿,远高于深圳(上海胜有一个人长年蹭我和同事车,最近还带着她儿子一起蹭,不坐公交也不买电动车,怎么办?我单位以前有个同事也是这样的,没你这么严重,她是每天早上七点左右都要给我打电话问一下我今天怎么走啊?要是开车就顺便接上她,要是坐公交车就上车后微信她,她也好和我坐同一辆车!看上去很一线城市是否可以全面放开摩托车行驶?不仅仅是一线城市,每个城市最应该放开摩托的行驶而且应该大力提倡。因为摩托的优势是其他交通工具代替不了的。堵车已经成了每个城市急需解决的问题,而摩托可以说是解决拥堵最好的交通工具。使我与同工厂员工打架对方受伤了,老板直接把我工资拿去抵扣医药费,这样合理吗?你得感谢这个老板赔钱了事,免费给你做了一个调解人,按流程报警,然后对伤者做伤情鉴定,你暂时要被拘留,待结果出来后,警方会协助你们达成私底和解(出钱了事),如你不同意,拘役管制还得罚半路出家的会计,做了5年,还是很难找到工作是为啥?年龄大的问题吗?感谢悟空邀请我是郑老师,一名从事财务和审计工作22年的老兵!2004年通过注册会计师,从2005年开始从事会计师事务所审计工作至今。喜欢研究财务审计和税务!半路出家的会计,做了5年有人说桂林工资两千八包吃住,普遍工资都这么低,有谁知道桂林做什么工作工资高点吗?各个城市都有人问这个问题,尤其广西这种欠发达地区。说普遍2000来块的确是现状,试问这个工资段的朋友的工作真的辛苦吗?是有技术门槛还是资源渠道跟累积,还是不断学习增值,思考动脑袋那PS4用时间长了机器老化会影响游戏帧数吗?你怎么看?首先ps4上的大部分游戏运行帧数都可以稳定在30帧,极少数大作需要60帧,这个肯定和ps4本身的机能有关系。但是时间长了机器老化是不会影响游戏运行帧数的,两个概念。机器老化可能出现一般纳税人的企业,进项700万销项750万,为什么会有150万库存商品?怎样才能减下去?进项700万,销项750万,为什么会有150万的库存商品?我觉得这里混淆了一个概念,就是销售成本库存商品。假设这是一个新成立的商贸公司,没有期初余额。公司在购进商品后,肯定会加上自硕士毕业去一线城市的企业好,还是去三线城市做公务员好?虽然说选择在个人的意向,但是有些先例还是可以了解一下。讲一下身边几个朋友的故事吧,或许有借鉴作用。同学A,80头部生人,北京985大学硕士毕业的时候去了南方一所二线城市(不是他的老
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网