第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Golang 綁定在 libtorrent 中投射“警報”類型

使用 Golang 綁定在 libtorrent 中投射“警報”類型

Go
森林海 2021-09-10 10:32:26
我正在 Golang 開發(fā)一個個人項目,使用libtorrent-go當(dāng)我收到類型為 的警報時"save_resume_data_alert",我將其撿起并必須按照libtorrent 文檔中的說明進(jìn)行 CAST...        save_resume_data_alert const* rd = alert_cast<save_resume_data_alert>(a);...但我真的不知道如何在 golang 中轉(zhuǎn)換它!當(dāng)前代碼:package mainimport (    lt "github.com/steeve/libtorrent-go"    "log"    "time")func main() {    randomTorrent := lt.NewAdd_torrent_params()    randomTorrent.SetUrl("PUT A MAGNET LINK HERE")    randomTorrent.SetSave_path(".")    ec := lt.NewError_code()    torrentSession := lt.NewSession()    torrentSession.Set_alert_mask(status_notification + storage_notification)    torrentSession.Listen_on(lt.NewStd_pair_int_int(6900, 6999), ec)    if ec.Value() != 0 {        log.Println(ec.Message())    }    torrentHandle := torrentSession.Add_torrent(randomTorrent, ec)    if ec.Value() != 0 {        log.Println(ec.Message())    }    go func() {        for {            if torrentSession.Wait_for_alert(lt.Seconds(10)).Swigcptr() == 0 {                log.Println("Alert timeout occurred!")            }            alert := torrentSession.Pop_alert()            switch alert.What() {            default:                log.Printf("Alert: %#v", alert.What())            case "metadata_received_alert":                log.Println("Received Metadata!! finally!")                torrentHandle.Save_resume_data()            case "save_resume_data_alert":                log.Println("Wrote Metadata!")                // need to actually write the resume_data :( can't find how            case "save_resume_data_failed_alert":                log.Println("Failed Metadata!")            }        }    }()    select {}}
查看完整描述

1 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊

如上所述,libtorrent-go開發(fā)人員回答了我,因此出于后代原因,我轉(zhuǎn)發(fā)了答案。


SWIG-Golang 文檔中記錄了使用 SWIG 庫在 Golang 中轉(zhuǎn)換 C++ 結(jié)構(gòu)。

特別是在本聲明中:


給定接口類型的值,Go 代碼可以通過調(diào)用 Swigcptr 方法檢索指向 C++ 類型的指針。這將返回 SwigcptrClassName 類型的值,它只是 uintptr 的名稱。Go 類型轉(zhuǎn)換可用于將此值轉(zhuǎn)換為不同的 C++ 類型,但請注意,此轉(zhuǎn)換不會進(jìn)行類型檢查,并且本質(zhì)上等同于 reinterpret_cast。這應(yīng)該僅用于非常特殊的情況,例如 C++ 將使用 dynamic_cast 的情況。


在我上面發(fā)布的那段特定代碼中,以下是使其工作所必需的:


case "save_resume_data_alert":

  log.Println("Wrote Metadata!")

  // need to actually write the resume_data :( can't find how

  SaveRDAlert := lt.SwigcptrSave_resume_data_alert(alert.Swigcptr())

  log.Printf("Resume Data: %#v", SaveRDAlert.GetResume_data())


查看完整回答
反對 回復(fù) 2021-09-10
  • 1 回答
  • 0 關(guān)注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號