HEXA娛樂開發日志技術點002——下位機成功獲取彈幕

HEXA開發日志目錄
上一篇 HEXA娛樂開發日志技術點001——上位機成功獲取彈幕


前言

  • 下位機(機器人)也可以獲取彈幕了,可以參考源碼了解一下,源碼有很多不足之處,demo階段暫且忽略。
  • 回顧一下當初的計劃,下圖中綠色部分是目前demo成功的。
需求與技術依賴關系

編程框架

上次在上位機實現的核心邏輯(傳送門)沒有變,只要把它的核心邏輯搬到下位機上就行了,現在主要描述下位機的編程框架。上位機的程序完全是面向過程的編程方式,而下位機就是面向對象的編程方式,如果是使用面向對象語言的應用軟件工程師,會很容易理解這個框架。下面就是下位機的編程框架,在創建skill的時候會自動生成,從函數名應該很容易理解了,更具體的可以參考下面注釋、文檔源碼

//相當于class
type DanmuDriveMe struct {
    skill.Base
    //可以再加一些member
}
//相當于構造函數或者單例模式的getInstance
func NewSkill() skill.Interface {
    return &DanmuDriveMe{
        //增加的member的初始化
    }
}
func (d *DanmuDriveMe) OnStart() {
    //skill開始運行
}
func (d *DanmuDriveMe) OnClose() {
    //skill關閉
}
//這個remote就是瀏覽器或者相當于一個網頁
func (d *DanmuDriveMe) OnConnect() {
    //連接到remote
}
func (d *DanmuDriveMe) OnDisconnect() {
    //與remote斷開連接
}
func (d *DanmuDriveMe) OnRecvJSON(data []byte) {
    //收到remote發送的json
}
func (d *DanmuDriveMe) OnRecvString(data string) {
    //收到remote發送的string
}

如果你對OnXxxxx這種函數名感到費解,可以看一下說明:

OnXxxxx的簡單理解:Xxxxx是一個事件,當Xxxxx發生時,OnXxxxx會被調用。比如On開心就可以理解為,當對象實例開心時,On開心會被調用。那么誰來調用的呢?這個調用者捕捉這個開心事件靠譜嗎?這些就是SDK內部實現的問題了。在面向對象編程中,這是典型的事件驅動編程用的函數命名方式和框架形式,一般底層編程很少這樣命名,而是用類似callback的字眼來命名。

上/下位機通信

雖然在這個應用場景中,僅僅機器人的啟動是需要上位機來控制的,其他通信理論上都可以用彈幕搞定,但是這樣很不安全,關鍵的控制不能隨便暴露出去,而且開發與維護都需要上位機或客戶端與下位機互相通信,所以這是一個非常基礎的點。

下位機通信

  • 接收數據
    下位機可以通過下面兩個接口接收byte數組string兩種數據
func (d *DanmuDriveMe) OnRecvJSON(data []byte)
func (d *DanmuDriveMe) OnRecvString(data string)
  • 發送數據
    下位機可以通過下面兩個接口發送json.RawMessagestring兩種數據
func SendJSON(data json.RawMessage)
func SendString(str string)

上位機通信

上位機用onRecvSkillData接收數據,用sendData發送數據。

<html>
    <head>
        <script src="mind-framework.js"></script>
        <script type="text/javascript">
            mind.init({
                callback: function(robot){
                    skillID="DanmuDriveMe";
                    robot.connectSkill({
                        skillID: skillID
                        callback: robot.onRecvSkillData(function(skillID, data) {
                            //接收下位機數據
                        }
                    });
                    document.getElementById("buttonId").onclick = function() {
                        robot.sendData({
                            skillID: skillID, 
                            data: "向下位機發送的數據"
                        })
                    }
                }
            });
        </script>
    </head>
    <body>
        <button id="buttonId">我是個按鈕</button>
    </body>
</html>

總結

  • 完成了彈幕相關的demo,機器人可以接收彈幕并轉化為行動指令了。
  • 上/下位機通信調通,后面可以進行有效調試了。
  • 下一個關鍵任務就是調通OpenCV,來驗證C/C++庫的調用了。
  • 還有些事情可以開始種草了,包括彈幕命令集、機器人命名等。

下一篇 HEXA娛樂開發日志技術點003——下位機成功推流

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容