一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

玩轉(zhuǎn)OpenHarmony社交場(chǎng)景:即時(shí)通訊平臺(tái)

OpenAtom OpenHarmony ? 來源:未知 ? 2023-01-01 08:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

開源項(xiàng)目 OpenHarmony是每個(gè)人的 OpenHarmonyad914b52-8964-11ed-bfe3-dac502259ad0.jpg

朱偉

中國科學(xué)院軟件所

OpenHarmony知識(shí)體系工作組

一、簡(jiǎn)介

本樣例是基于即時(shí)通訊(Instant messaging,簡(jiǎn)稱IM)服務(wù)實(shí)現(xiàn)的OpenAtom OpenHarmony(簡(jiǎn)稱“OpenHarmony”)應(yīng)用,允許兩人或多人使用互聯(lián)網(wǎng)即時(shí)地傳遞文字、圖片、文件、語音、emoji等訊息,可應(yīng)用于各類聊天場(chǎng)景,為人們帶來更加及時(shí)高效的通訊體驗(yàn)。 此外即時(shí)通訊平臺(tái)具備較高的定制化特點(diǎn),適用于多種行業(yè),客戶可以根據(jù)自己的需求來定制,實(shí)現(xiàn)即時(shí)通訊的內(nèi)部私有化。 設(shè)備端:DAYU200(RK3568)開發(fā)板,OpenHarmony 3.1 release系統(tǒng)。

二、即時(shí)通訊實(shí)現(xiàn)原理

想要實(shí)現(xiàn)多個(gè)設(shè)備之間的無障礙即時(shí)通訊,需要多臺(tái)終端設(shè)備、終端應(yīng)用和服務(wù)器配合一起使用。首先應(yīng)該將終端應(yīng)用安裝到終端設(shè)備上,用戶通過應(yīng)用向服務(wù)器申請(qǐng)注冊(cè)賬號(hào)。隨后,用戶可以通過賬號(hào)進(jìn)行查找,添加其他好友,并向好友發(fā)送文字、圖片、文件、語音、emoji等訊息。用戶發(fā)送的訊息會(huì)先送達(dá)服務(wù)器,由服務(wù)器判斷其好友的狀態(tài)(離線/在線),然后選擇發(fā)送或者暫時(shí)緩存消息等操作。最后,好友的終端應(yīng)用接收到消息。實(shí)現(xiàn)即時(shí)通訊的設(shè)備需求:安裝應(yīng)用的終端設(shè)備、網(wǎng)絡(luò)環(huán)境和云端服務(wù)器。前提條件:用戶將應(yīng)用安裝在終端設(shè)備上,并且擁有注冊(cè)賬號(hào),且需要通訊的用戶也成功注冊(cè)了賬號(hào)并且添加了好友。通訊原理:用戶在安裝了應(yīng)用的終端設(shè)備上編輯信息(文字、圖片、文件、語音、emoji等),通過網(wǎng)絡(luò)將消息發(fā)送至云端服務(wù)器。當(dāng)對(duì)方用戶在線時(shí),云端服務(wù)器將把消息推送給對(duì)方用戶,對(duì)方用戶安裝了應(yīng)用的終端設(shè)備也將接收到信息。當(dāng)對(duì)方用戶不在線時(shí),信息將被暫時(shí)緩存在云端服務(wù)器。

三、4步實(shí)現(xiàn)多人即時(shí)通訊

(1)通訊功能 通訊功能是通過TCP協(xié)議實(shí)現(xiàn)的,我們將通訊接口connect()、send()、receive()的實(shí)現(xiàn)放置在CPP文件中,通過NAPI的方式對(duì)JS層暴露接口。 ?connect():客戶端和服務(wù)器建立連接; ? send():消息發(fā)送功能 ? receive():消息接收功能;
//建立TCP連接
if (connect(sock_cli, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
    napi_create_int32(env, 0, &result);
} else {
    napi_create_int32(env, 1, &result);
    OH_LOG_INFO(LOG_APP,"C++ 接收線程啟動(dòng)");
    startRec();
}
 //發(fā)送消息
if(send(sock_cli, data, strlen(data),0) == -1) {
    OH_LOG_INFO(LOG_APP,"zjf == send() : -1");
    napi_create_int32(env, 0, &result);
} else {
    OH_LOG_INFO(LOG_APP,"zjf == send() : !-1");
    napi_create_int32(env, 1, &result);
}
//接收消息
getStep(queue0,sharedMessage); //取出一條消息
const char *c_s=sharedMessage.c_str();//換為char*形式處理
napi_value result;
napi_create_string_utf8(env, c_s, sharedMessage.length(), &result);
std::string().swap(sharedMessage);//清空字符串
(2)文件消息的發(fā)送與接收adf71db0-8964-11ed-bfe3-dac502259ad0.png ? 文件轉(zhuǎn)發(fā)是即時(shí)通訊辦公場(chǎng)景下的重要功能。樣例中的文件功能支持文件消息的發(fā)送、接收和下載。用戶通過點(diǎn)擊聊天界面的“+”按鈕,選擇“文件”按鈕,完成本地文件的瀏覽,隨后可以選擇是否將文件發(fā)送給好友。這個(gè)功能的實(shí)現(xiàn)包括三個(gè)步驟:(1)文件的選擇;(2)文件上傳到服務(wù)器;(3)文件的接收。 ??文件上傳
//文件的選擇
let file1 = {filename: this.$app.$def.uid +'-'+ FILE_URL, name: 'file', uri: FILE_URL, type:fileType }
let fileId = this.guid();
let data = {};
let header = { "filename": this.selectedFileName.toString()};
//文件上傳到服務(wù)器
request.upload({ url: "http://" + this.$app.$def.ip +"/file/fileUpload?fileSignature=" + fileId + "&uid=" +this.$app.$def.uid + "&fileType=" +this.$app.$def.chatData[this.idx].unRead, header: header, method: "POST", files: [file1], data: [data] }).then((data) => {
  uploadTask = data;
  uploadTask.on('headerReceive', function callback(headers){
  _this.socketSendFile(fileId, timestamp);
  });
}).catch((err) => {
  console.error('fileSelect=====Failed to request the upload. Cause: ' + JSON.stringify(err));
})
//文件的接收
let downloadConfig = {  //下載參數(shù)
            url: fileUrl, 
            header: {}, 
            enableMetered: true, 
            enableRoaming: true,
            filePath: '/data/storage/el2/base/haps/entry/files/' + downloadFileName,
            networkType: request.NETWORK_WIFI
}
request.download(downloadConfig, (err, data) => {
        if (err) {
            return;
        }
        downloadTask = data;
        //下載完成
        downloadTask.on('complete', function callback() {
                prompt.showToast({
                   message: '下載文件成功!',
                   duration: 1000,
                });
});
(3)語音消息的發(fā)送與接收 ae0ccc28-8964-11ed-bfe3-dac502259ad0.png ? 用戶通過點(diǎn)擊聊天界面的錄制按鈕,完成語音的錄制,隨后可以選擇是否將語音發(fā)送給好友。這個(gè)功能的實(shí)現(xiàn)包括三個(gè)步驟:(1)語音的錄制;(2)語音上傳到服務(wù)器;(3)語音的接收。 圖片消息的發(fā)送與語音消息的發(fā)送步驟相同,文章中不再贅述。
//語音錄制
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} case failed, audiorecorder is null`)
    }
}


//錄制好的語音文件的位置
let srcPath = 'internal://cache/' + this.mainData.file + '.wav'
let file1 = { filename: this.$app.$def.uid +'-'+ this.mainData.path, name: 'audio', uri: srcPath, type: "wav" };


//語音消息發(fā)送到服務(wù)器
request.upload({ url: myurl, header: header, method: "POST", files: [file1], data: [data] }).then((data) => {
            uploadTask = data;
            uploadTask.on('headerReceive', function callback(headers){
              _this.sendAudio(audioId)
            });
            uploadTask.on('progress', function callback(uploadedSize, totalSize) {
                console.info("dialogPages=====upload totalSize:" + totalSize + "  uploadedSize:" + uploadedSize);
            });
        }).catch((err) => {
            console.error('dialogPages=====Failed to request the upload. Cause: ' + JSON.stringify(err));
        })
//語音的接收
let downloadConfig = {    //下載參數(shù)
        url: item.content.path,
        header: {},  
        enableMetered: true,                      
        enableRoaming: true,                      
        filePath: filePath,               
        networkType: request.NETWORK_WIFI        
}
        let downloadTask;
        let _this = this
        request.download(downloadConfig, (err, data) => {
            if (err) {
                 return;
            }
            downloadTask = data;
            //下載完成
            downloadTask.on('complete', function callback() {
               let audio = {
                  content: { path: filePath }
                 }
                 _this.playAudio(audio)
});
(4)emoji消息的發(fā)送與接收 ae25034c-8964-11ed-bfe3-dac502259ad0.png ? emoji是即時(shí)通訊軟件不可缺少的一部分,可以更加生動(dòng)地表現(xiàn)用戶的聊天情感。在樣例中,用戶通過點(diǎn)擊聊天界面的emoji按鈕,即可找到目前應(yīng)用內(nèi)支持的所有樣式的emoji,隨后可以選擇具體樣式并將其發(fā)送給好友。
//引入emoji第三方組件
<element name="emojiExpression" src="../../common/components/emojiExpression/emojiExpression.hml">element>


//第三方組件的展示布局
<div id="moreContainer" if="{{showFace}}">
    <div id="moreOneLine">
        <div class="moreFillGap" style="flex: 1 1;">div>
        <text style="left: 25fp; top: 10fp;">所有表情text>
        <emojiExpression>emojiExpression>
        <div class="moreFillGap" style="flex: 1 1;">div>
    div>
div>

四、即時(shí)通訊功能總結(jié)

本樣例是基于OpenHarmony實(shí)現(xiàn)的即時(shí)通訊應(yīng)用,目前已經(jīng)支持文字、圖片、文件、語音、emoji等訊息的快速發(fā)送與接收。除此之外還實(shí)現(xiàn)了好友的添加與刪除、黑名單、安全登錄、私聊/群聊、個(gè)人信息設(shè)置(二維碼/頭像等)等功能的全方面支持。 代碼地址

https://gitee.com/isrc_ohos/instant-message_ohos

五、相關(guān)參考鏈接

樣例源碼

https://gitee.com/isrc_ohos/instant-message_ohos

OpenHarmony知識(shí)體系工作組

https://gitee.com/openharmony-sig/knowledge


原文標(biāo)題:玩轉(zhuǎn)OpenHarmony社交場(chǎng)景:即時(shí)通訊平臺(tái)

文章出處:【微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2622

    瀏覽量

    44075
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3855

    瀏覽量

    18647

原文標(biāo)題:玩轉(zhuǎn)OpenHarmony社交場(chǎng)景:即時(shí)通訊平臺(tái)

文章出處:【微信號(hào):gh_e4f28cfa3159,微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    海底光纜系統(tǒng)怎么組成

    在數(shù)字浪潮席卷全球的當(dāng)下,短視頻的沉浸式體驗(yàn)、跨國即時(shí)通訊的暢所欲言以及全天候全球資訊的實(shí)時(shí)推送,早已成為我們生活的日常。
    的頭像 發(fā)表于 07-21 14:45 ?78次閱讀

    ArkUI-X平臺(tái)橋接Bridge說明

    。 使用場(chǎng)景及能力 使用場(chǎng)景 平臺(tái)橋接主要用于這樣的場(chǎng)景:應(yīng)用需要復(fù)用平臺(tái)的代碼,而在OpenHarmo
    發(fā)表于 06-19 23:12

    ArkUI-X平臺(tái)差異化

    平臺(tái)使用場(chǎng)景是一套ArkTS代碼運(yùn)行在多個(gè)終端設(shè)備上,如Android、iOS、OpenHarmony(含基于OpenHarmony發(fā)行的商業(yè)版,如HarmonyOS Next)。當(dāng)
    發(fā)表于 06-10 23:08

    基于瑞芯微RK3562 的四核 AR M Cortex-A53 + 單核 ARM Cortex-M0工業(yè)評(píng)估板——MQTT通信方案

    MQTT作為一種低開銷,低帶寬占用的即時(shí)通訊協(xié)議,可以極少的代碼和帶寬為聯(lián)網(wǎng)設(shè)備提供實(shí)時(shí)可靠的消息服務(wù),適用于硬件資源有限的設(shè)備及帶寬有限的網(wǎng)絡(luò)環(huán)境。我司提供的評(píng)估板文件系統(tǒng)已支持Mosquitto工具,本文mqtt_client案例采用Mosquitto工具演示MQTT通信協(xié)議的通信功能。
    的頭像 發(fā)表于 06-05 15:00 ?1440次閱讀
    基于瑞芯微RK3562 的四核 AR M Cortex-A53 + 單核 ARM Cortex-M0工業(yè)評(píng)估板——MQTT通信方案

    鴻蒙5開發(fā)寶藏案例分享---一多開發(fā)實(shí)例(即時(shí)通訊

    們準(zhǔn)備好了超多實(shí)用開發(fā)案例!尤其是那個(gè)讓無數(shù)人頭疼的\"一次開發(fā)多端部署\",官方竟然悄悄塞了這么多實(shí)戰(zhàn)技巧?。ㄅ拇笸龋??先上硬核案例:即時(shí)通訊應(yīng)用的多端魔法? 官方這個(gè)即時(shí)通訊
    發(fā)表于 06-03 16:01

    MIDI Unit:專業(yè)音頻控制單元,玩轉(zhuǎn)MIDI音樂制作

    MIDI,其實(shí)就是樂器數(shù)字化接口(MusicalInstrumentDigitalInterface)的簡(jiǎn)稱,是一種讓樂器、計(jì)算機(jī)和其他類型硬件之間即時(shí)通訊的協(xié)議。用于演奏數(shù)據(jù)的實(shí)時(shí)傳輸,該標(biāo)準(zhǔn)允許
    的頭像 發(fā)表于 02-08 10:13 ?526次閱讀
    MIDI Unit:專業(yè)音頻控制單元,<b class='flag-5'>玩轉(zhuǎn)</b>MIDI音樂制作

    華為云 Flexus X 實(shí)例云服務(wù)器部署即時(shí)通訊 IM 項(xiàng)目

    @TOC ? 寫在前面 手里拿到了一臺(tái) 華為云 Flexus X 實(shí)例 的云服務(wù)器,部署部署項(xiàng)目試試看看性能怎么樣。正當(dāng)華為云 828 上云活動(dòng),可領(lǐng) 8280 元的券,活動(dòng)地址在這里:點(diǎn)我查看 ? 讓我們來看看干點(diǎn)什么呢?部署個(gè)實(shí)用的應(yīng)用吧~ Flexus X 實(shí)例云服務(wù)器 介紹 首先,flexus 系列的產(chǎn)品不止有云服務(wù)器,還有如下一些產(chǎn)品: 1.?Flexus L 實(shí)例的云服務(wù)器 2.?Flexus X 實(shí)例的云服務(wù)器 3.?Flexus 云數(shù)據(jù)庫 RDS 4.?Flexus 云容器實(shí)例 5.?Flexus 數(shù)字人 6.?Flexus 企業(yè)搜索服務(wù) 7.?Fle
    的頭像 發(fā)表于 02-07 10:15 ?410次閱讀
    華為云 Flexus X 實(shí)例云服務(wù)器部署<b class='flag-5'>即時(shí)通訊</b> IM 項(xiàng)目

    HarmonyOS NEXT 原生應(yīng)用開發(fā):社交通訊錄界面實(shí)現(xiàn)

    一、案例想法 本DEMO展示了如何在HarmonyOS NEXT平臺(tái)上,使用ArkTS開發(fā)語言構(gòu)建一個(gè)簡(jiǎn)單的社交通訊錄界面。用戶可以在此界面上瀏覽聯(lián)系人列表,每個(gè)聯(lián)系人條目包含姓名、電話號(hào)碼以及一個(gè)
    發(fā)表于 01-09 14:37

    一文洞悉PoC公網(wǎng)對(duì)講與DMR數(shù)模對(duì)講的優(yōu)劣之勢(shì)

    在通信領(lǐng)域,對(duì)講技術(shù)以其獨(dú)特的即時(shí)通訊特性,在眾多行業(yè)和場(chǎng)景中發(fā)揮著重要作用。其中,PoC公網(wǎng)對(duì)講和DMR數(shù)模對(duì)講作為兩種主流的對(duì)講技術(shù),各自具有獨(dú)特的優(yōu)勢(shì)和局限性。本文將對(duì)這兩種技術(shù)進(jìn)行詳細(xì)的比較
    的頭像 發(fā)表于 12-25 16:24 ?873次閱讀
    一文洞悉PoC公網(wǎng)對(duì)講與DMR數(shù)模對(duì)講的優(yōu)劣之勢(shì)

    [迅為RK3568開發(fā)板]非科班也能玩轉(zhuǎn)Android應(yīng)用,體驗(yàn)QT跨平臺(tái)能力

    [迅為RK3568開發(fā)板]非科班也能玩轉(zhuǎn)Android應(yīng)用,體驗(yàn)QT跨平臺(tái)能力
    的頭像 發(fā)表于 12-18 16:41 ?954次閱讀
    [迅為RK3568開發(fā)板]非科班也能<b class='flag-5'>玩轉(zhuǎn)</b>Android應(yīng)用,體驗(yàn)QT跨<b class='flag-5'>平臺(tái)</b>能力

    “恒峰國際”完成1億美金融資,推出區(qū)塊鏈平臺(tái)FO-X

    注入了強(qiáng)大的動(dòng)力。 與此同時(shí),“恒峰國際”還宣布將打造全新的區(qū)塊鏈平臺(tái)FO-X,并推出了該平臺(tái)下的首款產(chǎn)品——即時(shí)通訊軟件FoChat。據(jù)悉,F(xiàn)oChat不僅具備即時(shí)通訊的基本功能,還
    的頭像 發(fā)表于 12-13 10:41 ?8215次閱讀

    即時(shí)通話軟件音頻傳輸質(zhì)量測(cè)試方案

    使用過程中的音頻傳輸質(zhì)量。即時(shí)通話軟件基于移動(dòng)網(wǎng)絡(luò)鏈路傳輸信號(hào),通過本套測(cè)試方案中配套的網(wǎng)絡(luò)損傷仿真設(shè)備對(duì)傳輸鏈路添加不同的網(wǎng)絡(luò)影響,模擬軟件在不同網(wǎng)絡(luò)環(huán)境下的使用情況,進(jìn)而測(cè)得更接近真實(shí)應(yīng)用場(chǎng)景下的音頻傳輸質(zhì)量。 POLQA測(cè)試算法是基于心理聲學(xué)模型,模擬人類聽覺系統(tǒng)對(duì)
    的頭像 發(fā)表于 12-03 14:34 ?745次閱讀
    <b class='flag-5'>即時(shí)通</b>話軟件音頻傳輸質(zhì)量測(cè)試方案

    純血鴻蒙開啟公測(cè) 360織語內(nèi)測(cè)“嘗鮮版”主攻企業(yè)即時(shí)通訊

    鴻蒙
    的頭像 發(fā)表于 10-10 10:36 ?561次閱讀

    對(duì)等通訊協(xié)議有哪些類型

    對(duì)等通訊協(xié)議(Peer-to-Peer Protocols)是計(jì)算機(jī)網(wǎng)絡(luò)中允許兩個(gè)或多個(gè)節(jié)點(diǎn)直接相互通信而無需通過中間服務(wù)器的協(xié)議。這類協(xié)議在文件共享、即時(shí)通信、區(qū)塊鏈技術(shù)等領(lǐng)域有廣泛應(yīng)用。以下
    的頭像 發(fā)表于 09-09 17:11 ?1177次閱讀

    Meta旗下社交平臺(tái)Threads推出新功能

    Meta旗下的新興社交平臺(tái)Threads近期宣布了一系列新功能的推出,旨在為企業(yè)用戶和數(shù)字創(chuàng)作者提供更加便捷和強(qiáng)大的內(nèi)容管理工具。此次更新不僅豐富了平臺(tái)的交互體驗(yàn),還進(jìn)一步提升了數(shù)據(jù)透明度與發(fā)布效率。
    的頭像 發(fā)表于 08-16 18:00 ?2110次閱讀