[發明專利]一種虛幻引擎與外部程序的數據通信方法有效
| 申請號: | 202110523205.8 | 申請日: | 2021-05-13 |
| 公開(公告)號: | CN113296979B | 公開(公告)日: | 2022-10-14 |
| 發明(設計)人: | 徐新海;朱成璋;劉遜韻;李豪;葉帥;楊偉龍 | 申請(專利權)人: | 中國人民解放軍軍事科學院戰爭研究院 |
| 主分類號: | G06F9/54 | 分類號: | G06F9/54 |
| 代理公司: | 中國兵器工業集團公司專利中心 11011 | 代理人: | 祁恒 |
| 地址: | 100091 *** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 虛幻 引擎 外部 程序 數據通信 方法 | ||
1.一種虛幻引擎與外部程序的數據通信方法,其特征在于,所述虛幻引擎與外部程序之間采用gRPC遠程服務調用作為數據傳輸的通信方式,采用protobuf作為數據傳輸格式;虛幻引擎與外部程序的數據通信分為虛幻引擎主動請求和虛幻引擎被動監聽兩種形式;其中,
所述虛幻引擎主動請求是虛幻引擎將需要發送的消息封裝為protobuf數據傳輸格式,采用gRPC提供的request功能,將數據發送給指定的外部程序,并收取該外部程序通過gRPC提供的reply功能對上述數據進行的回復;具體包括如下步驟:
1.1、建立protobuf數據格式文件
建立protobuf數據格式文件,根據protobuf格式語法,定義數據傳輸格式,在該數據格式文件中定義gRPC遠程服務調用的具體服務名稱并指定該服務在request和reply功能中傳遞數據的傳輸格式;
1.2、編譯protobuf數據格式文件
使用protobuf工具protoc編譯在步驟1.1中建立的protobuf數據格式文件,生成protobuf數據格式的C++頭文件和源文件;將頭文件和源文件拷貝至虛幻引擎項目中,供虛幻引擎使用步驟1.1中定義的protobuf數據格式和gRPC遠程調用服務;
1.3、創建“主動請求”的C++基類
在虛幻引擎項目中創建“主動請求”的C++基類,在此基類頭文件中引用步驟1.2中生成的頭文件,并在此基類中利用C++智能指針創建步驟1.1中定義的gRPC遠程服務調用的通信憑證作為其類變量;
1.4、創建每種“主動請求”的gRPC具體服務的C++類
在虛幻引擎項目中為每一種需要虛幻引擎“主動請求”的gRPC具體服務創建C++類,這些類繼承步驟1.3中創建的“主動請求”的C++基類;在這些類中,定義消息發送的具體實現函數,使用基類中的通信憑證中包含的gRPC異步消息發送函數發送數據;其中,所述發送數據具有由步驟1.1定義的protobuf數據格式;
1.5、創建“主動請求”通信接口的C++類
在虛幻引擎項目中創建“主動請求”通信接口的C++類;在該類中,將步驟1.4中所有創建的虛幻引擎“主動請求”的gRPC具體服務的C++類實例化為通信接口類的類變量,同時設置一個字符串類型的類變量用以保存所需通信的外部程序的監聽地址;在該類中提供通信接口的構造函數以及每項gRPC具體服務通信的接口函數;其中,通信接口構造函數參數為所需通信的外部程序的監聽地址、gRPC通信配置;外部程序的監聽地址傳入步驟1.3基類中的通信憑證變量之中;gRPC通信配置為gRPC遠程服務調用所需求的通用配置參數;每項gRPC具體服務通信的接口函數的參數為該通信所需發送的具體數據變量,該函數通過調用對應的通信接口類變量中的消息發送的具體實現函數發送數據,并返回外部程序對gRPC請求的響應數據;
1.6、創建每種“主動請求”的gRPC具體服務的異步任務類
在虛幻引擎項目中,為每一項“主動請求”的gRPC具體服務創建異步任務類,該類通過繼承自虛幻引擎提供的異步任務基類實現任務異步執行的能力;在該類中,除了虛幻引擎中使用異步任務基類必須設置的默認變量和函數外,額外設置三個類變量:第一個額外的類變量為步驟1.5中創建的“主動請求”通信接口的C++類的類實例指針;第二個額外的類變量為所需發送的數據變量;第三個額外的變量為所接收的響應數據變量;上述額外設置的三個類變量的值,通過異步任務類的構造函數傳入,在該異步任務類的任務執行函數中使用,使用方法為:將所需發送的數據變量以參數形式傳入通信接口的C++類的類實例指針包含的對應本異步任務類的gRPC具體服務的接口函數中,將接口的返回值保存至響應數據變量中;
1.7、封裝每種“主動請求”的gRPC具體服務的數據發送函數
在虛幻引擎項目中,為每一項“主動請求”的gRPC具體服務封裝數據發送函數,并在該函數的聲明前加上虛幻引擎提供的宏,將該函數設置為藍圖可調用;該數據發送函數利用異步任務類在異步線程上執行步驟1.6創建的異步任務類;
1.8、在C++或藍圖中調用數據發送函數
在虛幻引擎項目中需要利用“主動請求”進行通信時,通過C++或藍圖調用在步驟1.7封裝的數據發送函數,實現引擎“主動請求”形式的通信;
所述虛幻引擎被動監聽是虛幻引擎開啟gRPC監聽端口,監聽任意外部程序通過gRPC提供的request功能發送到該端口的protobuf傳輸格式定義的數據;在收到數據后,虛幻引擎采用gRPC提供的reply功能對上述數據進行回復;具體包括如下步驟:
2.1、建立protobuf數據格式文件
建立protobuf數據格式文件,根據protobuf格式語法,定義數據傳輸格式,在該數據格式文件中定義gRPC遠程服務調用的具體服務名稱并指定該服務在request和reply功能中傳遞數據的傳輸格式;
2.2、編譯protobuf數據格式文件
使用protobuf工具protoc編譯在步驟2.1中建立的protobuf數據格式文件,生成protobuf數據格式的C++頭文件和源文件;將頭文件和源文件拷貝至虛幻引擎項目中,供虛幻引擎使用步驟2.1中定義的protobuf數據格式和gRPC遠程調用服務;
2.3、創建“被動監聽”的C++基類
在虛幻引擎項目中創建“被動監聽”的C++基類,在此基類頭文件中引用步驟2.2中生成的頭文件;此基類創建為模板類,其模板的參數列表中包含三個虛擬類型參數名,分別用以傳入監聽處理函數的返回值類型、gRPC遠程調用服務的請求類型、gRPC遠程調用服務的回復類型;在此C++基類中,創建gRPC中異步服務類的實例指針、服務完成隊列類的實例指針、服務異步響應類的實例、請求類實例以及回復類實例作為類變量;在此C++基類中以純虛函數的形式定義監聽處理函數的接口;
2.4、創建每種“被動監聽”的gRPC具體服務的C++類
在虛幻引擎項目中為每一種需要虛幻引擎“被動監聽”的gRPC具體服務創建C++類,這些類繼承步驟2.3中創建的“被動監聽”的C++基類,并將該服務所涉及的具體的監聽處理函數的返回值類型、gRPC遠程調用服務的請求類型、gRPC遠程調用服務的回復類型傳入步驟2.3中模板的參數列表中;在這些類中,針對不同的需要監聽的gRPC服務,給出監聽處理函數的具體實現;在監聽處理函數的具體實現中,使用基類中創建的類變量異步接收外部程序發送來的具有由步驟2.1定義的protobuf數據格式的數據,并將數據存放至服務完成隊列中等待處理;對于服務完成隊列中的數據的處理,包含兩個步驟:第一,將接收到的外部程序發送數據,提取并轉化為監聽處理函數的返回值類型返回至函數調用對象;第二,依據所設計的gRPC具體服務需求,將虛幻引擎中的需回復的數據以回復類形式回復外部程序;
2.5、創建“被動監聽”的監聽服務C++類
在虛幻引擎項目中創建“被動監聽”的監聽服務C++類;在該類中,利用C++智能指針創建gRPC監聽服務類的實例指針,并為步驟2.4中創建的gRPC具體服務的C++類創建服務完成隊列的實例指針,將上述實例指針作為該類的類變量;提供監聽服務的開始運行和結束運行函數,開始運行函數指定監聽端口號,打開gRPC服務監聽端口,并綁定各服務完成隊列,結束運行函數關閉gRPC服務監聽端口,并關閉各服務完成隊列;
2.6、創建“被動監聽”異步線程的C++基類
在虛幻引擎項目中,創建“被動監聽”異步線程的C++基類;該基類通過繼承自虛幻引擎提供的異步線程基類實現創建異步線程執行并在異步線程上執行任務的能力;在該基類中,除了虛幻引擎中使用異步線程基類必須設置的默認變量和函數外,額外設置兩個類變量:第一個額外的類變量為步驟2.5中創建的“被動監聽”的監聽服務C++類的類實例指針,該類實例指針通過虛幻引擎提供的共享指針模板類創建;第二個額外的類變量為布爾類型,用以作為監聽服務是否已完成的標志位;
2.7、創建每項“被動監聽”的gRPC具體服務的異步線程類
在虛幻引擎項目中,為每一項“被動監聽”的gRPC具體服務創建異步線程類;該類繼承自步驟2.6創建的“被動監聽”異步線程基類;在該類中,除繼承基類的類變量外,額外設置一個類變量,該類變量為虛幻引擎提供的隊列模板類的實例,其實例中數據類型為該類對應的gRPC具體服務C++類中監聽處理函數的返回值類型;該異步線程類覆寫基類中的異步線程執行函數,在該執行函數中,通過C++的while循環,循環使用步驟2.6中創建的第一個額外變量調用步驟2.4中創建的監聽處理函數以處理該異步線程類對應的在步驟2.5中創建的服務完成隊列中的數據,每次循環中,處理得到的數據被寫入該異步線程類的隊列模板類實例變量中,供其它線程讀取;該while循環的執行條件,由步驟2.6中創建的第二個額外變量決定:當該變量值為false時執行循環,當該變量值為true時結束循環;
2.8、封裝“監聽服務開啟函數”和“監聽服務關閉函數”
在虛幻引擎項目中封裝“監聽服務開啟函數”和“監聽服務關閉函數”;在監聽服務開啟函數中,調用步驟2.5中創建的“被動監聽”的監聽服務C++類中的開始運行函數,開啟監聽服務;在監聽服務開啟函數中使用虛幻引擎提供的異步線程構建函數構建異步線程并執行步驟2.7中創建的gRPC具體服務異步線程類,用以在異步線程上處理監聽到的gRPC具體服務中包含的數據;在監聽服務關閉函數中,將所有步驟2.7中創建的gRPC具體服務異步線程類中的循環執行標志位設置為true,執行步驟2.5中創建的“被動監聽”的監聽服務C++類中的結束運行函數關閉監聽服務,并刪除在監聽服務開啟函數中構造執行的所有異步線程;
2.9、在C++或藍圖中調用“監聽服務開啟函數”和“監聽服務關閉函數”
在虛幻引擎項目中需要利用“被動監聽”進行通信時,通過C++或藍圖調用在步驟2.8封裝的監聽服務開啟函數,實現引擎被動監聽外部程序發送的數據,并將有關數據回復給外部程序;當無需繼續進行“被動監聽”通信時,通過C++或藍圖調用在步驟2.8封裝的監聽服務關閉函數,關閉被動監聽通信。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國人民解放軍軍事科學院戰爭研究院,未經中國人民解放軍軍事科學院戰爭研究院許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110523205.8/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種基于實體類型的并行仿真實體劃分方法
- 下一篇:攝像機模塊





