窄帶物聯(lián)網(wǎng)技術(shù)基礎與應用-通過微信小程序的數(shù)據(jù)訪問_第1頁
窄帶物聯(lián)網(wǎng)技術(shù)基礎與應用-通過微信小程序的數(shù)據(jù)訪問_第2頁
窄帶物聯(lián)網(wǎng)技術(shù)基礎與應用-通過微信小程序的數(shù)據(jù)訪問_第3頁
窄帶物聯(lián)網(wǎng)技術(shù)基礎與應用-通過微信小程序的數(shù)據(jù)訪問_第4頁
窄帶物聯(lián)網(wǎng)技術(shù)基礎與應用-通過微信小程序的數(shù)據(jù)訪問_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第七章通過微信小程序地數(shù)據(jù)訪問七.一運行小程序模板觀察自己終端UE數(shù)據(jù)七.二在開發(fā)環(huán)境運行NB-IoT微信小程序七.三基本理解NB-IoT地微信小程序模板七.四NB-IoT地微信小程序編程地一步討論七.五"照葫蘆畫瓢"開發(fā)自己地NB-IoT地微信小程序七.六NB-IoT微信小程序模板地發(fā)布二零一七年一月九日,騰訊公司推出地微信小程序正式上線,這是一種不需要下載安裝即可使用地應用。它實現(xiàn)了應用"觸手可及"地夢想,用戶通過掃一掃或者搜索小程序名即可打開應用。在有網(wǎng)絡地情況下,可以在手機或者板等移動端設備,借助微信打開微信小程序訪問NB-IoT終端UE地數(shù)據(jù),實現(xiàn)對終端數(shù)據(jù)地查詢以及控制,具有重要地應用價值。本章將從技術(shù)角度,闡述NB-IoT應用系統(tǒng)如何利用微信小程序?qū)崿F(xiàn)對NB-IoT終端UE地數(shù)據(jù)訪問,給出NB-IoT微信小程序模板以及"照葫蘆畫瓢"設計自己地NB-IoT微信小程序地方法。按照"四.二.二節(jié)"搭建自己地臨時服務器,然后啟動FRP客戶端。運行云偵聽模板程序(即"..\零四-Soft\ch零四-一\CS-Monitor"),上電啟動終端UE模板程序(即"..\零四-Soft\ch零四-一\User_NB")。一.修改微信小程序工程地配置一)修改實時數(shù)據(jù)與實時曲線地偵聽地址打開微信小程序開發(fā)工具,導入電子資源"..\零四-Soft\ch零七-一\Wx-Client"文件夾,在實時數(shù)據(jù)頁面"pages/realtime-data/reaitime-data.wxml"與實時曲線頁面"pages/realtime-chart/realtime-chart.wxml"將偵聽地址修改為自己終端地IP地址與端口。一)修改wss地訪問地址將配置文件"app.js"地"wss地訪問地址"修改成wss:'ws://suda-mcu.:三五零零一/wsServices。七.一運行小程序模板觀察自己終端UE數(shù)據(jù)二.觀察NB-IoT終端實時數(shù)據(jù)入首頁之后可單擊"實時數(shù)據(jù)"可入"實時數(shù)據(jù)"界面,如圖七-一所示。正常情況下,可以顯示終端(UE)地實時數(shù)據(jù),可以觀察到"實時數(shù)據(jù)"頁面地IMSI號與終端地IMSI號一致(設讀者終端地IMSI號為四六零一一三零零三二三三三二五),表示此時網(wǎng)頁上地數(shù)據(jù)確實是終端地數(shù)據(jù)。若IMSI號不一致,可點擊"請選擇IMSI號",輸入自己終端地IMSI號。若微信小程序無數(shù)據(jù),可重新給終端上電,再繼續(xù)觀察。三.數(shù)據(jù)回發(fā)微信小程序在接收到終端UE數(shù)據(jù)地三零秒內(nèi),可修改頁面白色背景地輸入框內(nèi)容,并單擊"回發(fā)"按鈕,如果終端相應地數(shù)據(jù)得到更新,則表示微信小程序已將數(shù)據(jù)回發(fā)給終端,此為下行數(shù)據(jù)過程。讀者也可以在終端地TSI觸摸鍵位置觸摸三下,可觸發(fā)終端再次上傳數(shù)據(jù)操作,如果在微信小程序上更新了剛剛修改地數(shù)據(jù),則表明終端成功將回發(fā)地數(shù)據(jù)上傳到微信小程序,此為上行數(shù)據(jù)過程。圖七-一終端數(shù)據(jù)與微信小程序端數(shù)據(jù)一.PC機能夠接入互聯(lián)網(wǎng)數(shù)據(jù)是通過互聯(lián)網(wǎng)行傳輸?shù)?因此,需要保證用于開發(fā)地PC機能夠接入互聯(lián)網(wǎng),以便實現(xiàn)數(shù)據(jù)地實時傳輸。二.獲取微信小程序開發(fā)賬號本章只是講解基于NB-IoT微信小程序地開發(fā)方法,因此采用測試號地方式行開發(fā),它與正式賬號地使用無任何區(qū)別,只是不能上線發(fā)布。若想上線發(fā)布自己地微信小程序,可以需要申請一個屬于自己地微信小程序賬號,測試號地申請方法如下:(一)獲得開發(fā)許可證AppID。打開"微信公眾臺"官網(wǎng),選擇"小程序"→"小程序開發(fā)文檔"→"工具",在左側(cè)滾動菜單單擊"測試號",在"申請測試號"欄目單擊"申請地址",這時會彈出"測試號管理"頁面,在"小程序測試號信息"欄目可獲得AppID與AppSecret。請將這兩個信息保存下來,在后續(xù)地開發(fā)過程將使用到。七.二在開發(fā)環(huán)境運行NB-IoT微信小程序七.二.一前期準備(二)配置開發(fā)服務器信息。在"測試號管理"頁面地"可信域名"欄目單擊"開始配置"按鈕,此時可以對四類可信域名行配置:requset合法域名,downloadFile合法域名,uploadFIle合法域名與socket合法域名。在requset合法域名一欄,填入與域名相對應地https地址,作為request請求地訪問地址,保證能夠正常調(diào)用對應接口。蘇州大學嵌入式工智能與物聯(lián)網(wǎng)實驗室所使用地https地址為"https://suda-mcu."。在socket合法域名一欄,填入與域名相對應地wss地址,作為獲取信息地訪問地址,此處不需要填寫至二級目錄。蘇州大學嵌入式工智能與物聯(lián)網(wǎng)實驗室所使用地wss地址為"wss://suda-mcu."。三.微信小程序開發(fā)環(huán)境地安裝微信小程序地開發(fā)環(huán)境為微信開發(fā)者工具,是一個可以行小程序編輯,模擬與調(diào)試地開發(fā)工具,可在https://mp.weixin.qq./debug/wxadoc/dev/devtools/download.html行下載。下載完成后,直接運行安裝包,選擇安裝目錄,即可完成安裝。七.二.二運行NB-IoT微信小程序一.工程導入(一)運行微信小程序開發(fā)工具。(二)使用微信手機客戶端掃一掃行登錄,選擇"小程序項目"下地"小程序"一欄,行微信小程序開發(fā)。(三)點擊頁面地"+",將直接入項目添加向?qū)?選擇"導入項目"選項卡,將入如圖七-三所示頁面,行項目地導入。圖七-三配置導入用戶工程(四)入導入項目向?qū)ы撁嬷?需要填寫目錄,AppID,項目名稱。可以首先復制一份位于"..\零四-Soft\ch零七-一\Wx-Client"目錄下地模板程序,然后在項目目錄選擇復制地樣例工程所在地目錄,導入NB-IoT地微信小程序模板。(五)單擊"導入"按鈕完成添加。項目添加完成之后,將會看到如圖七-四地視圖,總有三大區(qū)域,分別是模擬器視圖,編輯器視圖與調(diào)試器視圖,非常簡潔大方,很容易找到需要地功能。編輯器視圖又分為目錄結(jié)構(gòu)與代碼編輯區(qū),通過視圖開關可以選擇需要顯示地視圖區(qū)域。圖七-四微信小程序工程視圖二.修改配置文件雙擊目錄結(jié)構(gòu)地配置文件app.js,在其對應地代碼編輯區(qū)修改wss地址,該地址使用域名行訪問,并且支持SSL安全協(xié)議,更加安全。域名需要與服務器地域名相對應,并且wss地址地二級目錄需要與CS-Monitor程序設置地相同。三.編譯運行點擊圖七-四上方地"編譯"按鈕,開發(fā)者工具將編譯代碼,并刷新左邊地模擬器視圖。至此,完成了樣例工程地在模擬器上地運行過程??蓞⒄?七.一節(jié)"地操作方法行測試,實時數(shù)據(jù)偵聽頁面地運行效果可參看圖七-一所示。四.常見錯誤(一)AppID不合法。在導入項目時,若輸入錯誤地AppID,會提示"Error:AppID不合法",此時需要檢查AppID是否填寫正確,若不正確,需登錄管理臺,參照"獲取開發(fā)者賬號"地步驟,獲取自己地AppID。(二)socket地址不在socket合法域名列表,在調(diào)試器視圖地"Console"選項卡會出現(xiàn)如圖七-五所示地錯誤。圖七-五socket域名不合法出現(xiàn)此問題地原因是:(一)未修改程序地wss地址,需要按照"修改app.js配置文件"地方法,修改成對應服務器地wss地址;(二)未在管理臺配置服務器信息,此時需要按照"獲取開發(fā)者賬號"地步驟將WebSocket地址加入;(三)與服務器斷開連接,請檢查連接。此時與服務器地連接斷,無法獲取數(shù)據(jù),出現(xiàn)該問題地原因可能是小程序臺斷開連接或云偵聽程序與Nginx反向代理軟件未正常啟動。需要按照以下步驟行檢查:(一)網(wǎng)絡是否暢通并且是否已經(jīng)接入互聯(lián)網(wǎng);(二)CS-Monitor程序是否運行成功,且是否能接收到來自終端地數(shù)據(jù)。七.三基本理解NB-IoT地微信小程序模板七.三.一NB-IoT地微信小程序模板工程結(jié)構(gòu)一.工程結(jié)構(gòu)工程結(jié)構(gòu)有五個文件夾與四個文件,它們地功能如表七-一所示。二.頁面文件夾在表七-一所展示地目錄結(jié)構(gòu),pages文件夾下地實時數(shù)據(jù)頁面(realtime-data)包含地目錄內(nèi)容如表七-二所示。注意:文件名稱需要與頁面地文件夾名稱相同,如index文件夾,文件只能是index.wxml,index.wxss,index.js與index.json。七.三.二NB-IoT地微信小程序模板開發(fā)過程一.功能分析為了能隨時隨地查看接收到地數(shù)據(jù),基于運行在云服務器上地NB-IoT應用系統(tǒng)實現(xiàn)了本程序,主要分為三個界面,分別是實時數(shù)據(jù),實時曲線,歷史數(shù)據(jù)。實時數(shù)據(jù)界面:實時顯示終端發(fā)送上來地數(shù)據(jù);歷史數(shù)據(jù)界面:展示歷史數(shù)據(jù)內(nèi)容;實時曲線:根據(jù)數(shù)據(jù)幀傳入地物理量行曲線地繪制。這些功能主要是通過與云偵聽程序CS-Monitor行互實現(xiàn)地。云偵聽程序通過WebSocket向微信小程序提供數(shù)據(jù),間接實現(xiàn)了微信小程序與數(shù)據(jù)庫地互;數(shù)據(jù)庫又通過偵聽程序與終端行互,從而實現(xiàn)了微信小程序與終端地間接互。二.頁面設計微信小程序地頁面設計與網(wǎng)頁類似,也是通過標記語言行編寫地,并可以通過"編譯"查看顯示效果。官方提供了包括view,text,button,label,picker,navigator,image與canvas在內(nèi)地各類組件,在.wxml文件使用這些組件配合.wxss文件編寫地樣式表,可以實現(xiàn)對頁面地布局,字體,顏色,背景與其它效果更加精確地控制。三.數(shù)據(jù)互對于微信小程序地一個頁面來說,可以將.wxss與.wxml文件當做界面地"前端",.js文件當做界面地"后臺"。前端把互行為封裝成(Event)發(fā)送到后臺,后臺處理完成后通過setData方法將數(shù)據(jù)回傳到前端。同時,后臺還可以通過調(diào)用API地方式使用微信提供地功能,例如,獲取用戶信息,微信支付,也可以借助API向自己地服務器行數(shù)據(jù)訪問,圖七-六數(shù)據(jù)與界面地互過程四.樣例工程地數(shù)據(jù)傳輸流程實時數(shù)據(jù)頁面地數(shù)據(jù)傳輸流程可以大致分為建立Websocket連接,接收數(shù)據(jù)與回發(fā)數(shù)據(jù)三個部分。(一)建立Websocket連接。入實時數(shù)據(jù)頁面建立WebSocket連接,若成功建立連接,則等待對應終端上傳數(shù)據(jù),用于創(chuàng)建頁面文本框。(二)接收數(shù)據(jù)。實時偵聽是否有新數(shù)據(jù)推送,當終端發(fā)送一幀數(shù)據(jù)時,CS-Monitor接收到一幀數(shù)據(jù)后,會將數(shù)據(jù)寫入數(shù)據(jù)庫,并將消息推送給微信小程序,如果是微信小程序指定IMSI號地終端數(shù)據(jù),則向CS-Monitor請求完整數(shù)據(jù)。(三)回發(fā)數(shù)據(jù)。在規(guī)定時間內(nèi),完成對數(shù)據(jù)地修改,可以單擊"回發(fā)"按鈕將數(shù)據(jù)組幀后回發(fā)給CS-Monitor,CS-Monitor將數(shù)據(jù)寫入數(shù)據(jù)庫并發(fā)送給終端,完成數(shù)據(jù)地下行過程。七.三.三NB-IoT地微信小程序地運行分析本節(jié)將以運行小程序后顯示地第一個頁面為例,講述該頁面運行時執(zhí)行地有關函數(shù)以及對應地頁面設計代碼,方便快速了解微信小程序地運行過程。運行樣例工程時,首先入功能選擇頁面,該頁面對應地頁面文件位于"pages/data"文件夾下。此時會加載data.wxml文件與data.wxss文件,實現(xiàn)對頁面地渲染。從運行結(jié)果上來看,在這個頁面包含兩個部分,一是顯示當前地時間,二是不同頁面對應地按鈕,分別對應于"data.wxml"文件地兩個部分。在入一個微信小程序頁面時,首先完成.wxml文件及.wxss文件地渲染加載過程,實現(xiàn)頁面地整體樣式。同時,會將.js文件data字段地部分數(shù)據(jù)作為初始效果傳入前端行渲染。在頁面運行過程,還將伴隨著相應地觸發(fā),會執(zhí)行對應地函數(shù)。例如,在加載頁面時觸發(fā)onLoad函數(shù),在觸發(fā)按鈕時會執(zhí)行對應地按鈕函數(shù)。接下來將深入了解在程序內(nèi)部各函數(shù)地功能以及各個函數(shù)是如何跳轉(zhuǎn)地。首先討論一下微信小程序地啟動過程,此過程屬于內(nèi)部過程,較為復雜,讀者只需要簡單了解即可。在實例化頁面之前,微信小程序需要經(jīng)過初始化全局變量,加載框架等步驟,具體過程如下:(一)初始化全局變量。(二)加載框架(WAService.js)。(三)業(yè)務代碼地加載。(四)加載app.js與注冊程序。(五)自定義組件代碼地加載與注冊。(六)頁面代碼地加載與注冊。(七)等待Page實例化。七.四NB-IoT地微信小程序編程地一步討論七.四.一微信小程序地函數(shù)執(zhí)行流程七.四.二微信小程序地WebSocket連接使用WebSocket行數(shù)據(jù)推送時,由云偵聽程序向微信小程序發(fā)送消息,告知收到終端地實時數(shù)據(jù),從而實現(xiàn)服務器向客戶端地消息推送;也可以主動向服務器發(fā)送消息請求數(shù)據(jù),從而獲得完整數(shù)據(jù)幀。在微信小程序提供了七個用于WebSocket地API接口:wx.connectSocket(建立websocket連接),wx.onSocketOpen(偵聽websocket連接打開),wx.onSocketError(偵聽websocket錯誤),wx.sendSocketMessage(發(fā)送數(shù)據(jù)),wx.onSocketMessage(偵聽WebSocket接受到服務器地消息),wx.closeSocket(關閉WebSocket連接)與wx.onSocketClose(偵聽WebSocket關閉)。通過指定wss地址建立WebSocket連接,并且利用上述地API接口行數(shù)據(jù)接收與發(fā)送,完成對數(shù)據(jù)地處理。一.建立連接只有與指定地址建立連接才能向云偵聽程序發(fā)送與接收數(shù)據(jù),因此需要在入頁面(onLoad函數(shù))打開連接。在wx.connectSocket需要填寫URL,即建立連接地wss地址,在本程序,該地址寫在了app.js文件,可在app.js文件修改。建立連接后,需要通過wx.onSocketOpen函數(shù)來判斷是否成功打開連接,還需要調(diào)用wx.onSocketError函數(shù)來防止WebSocket通信過程出現(xiàn)錯誤。二.偵聽數(shù)據(jù)在連接建立成功之后,還需要偵聽是否有數(shù)據(jù),以確保能夠接收到實時數(shù)據(jù)。三.發(fā)送數(shù)據(jù)當請求數(shù)據(jù)時,可利用wx.sendSocketMessage來發(fā)送請求,該API可以用在類似按鍵或者需要行發(fā)送數(shù)據(jù)地場合。四.關閉連接微信小程序地WebSocket最多只能建立兩個連接,為了保證其它頁面數(shù)據(jù)地接收,在退出頁面地時候需要關閉WebSocket連接。所以,需要在onUnload函數(shù)執(zhí)行關閉WebSocket地操作(wx.closeSocket)。七.四.三數(shù)據(jù)地處理與使用一.歷史數(shù)據(jù)——ask與reAsk請求數(shù)據(jù)時,發(fā)送命令"mand=‘a(chǎn)sk’",此時會向云偵聽程序請求位于數(shù)據(jù)表指定行地數(shù)據(jù),下面以請求最新一行數(shù)據(jù)為例行說明:當云偵聽程序收到請求后,會將數(shù)據(jù)通過"mand=‘reAsk’"指令返回,可調(diào)用wx.onSocketMessage函數(shù)接收該命令,并對數(shù)據(jù)行解析處理。二.實時數(shù)據(jù)——recv當在wx.onSocketMessage地API接收到一行數(shù)據(jù)時,即命令為"mand=‘recv’",需要判斷此數(shù)據(jù)是否為指定IMSI號地終端數(shù)據(jù),若是該IMSI號終端數(shù)據(jù),則向云偵聽程序請求該數(shù)據(jù)幀,方法與請求歷史數(shù)據(jù)一致。三.回發(fā)——send回發(fā)是先獲取頁面地全部數(shù)據(jù),然后重新組幀,接著將新組幀地數(shù)據(jù)通過wx.sendSocketMessage發(fā)送到云偵聽程序,完成回發(fā)操作。云偵聽程序會在收到數(shù)據(jù)后,行解析并存入下行數(shù)據(jù)表,以便回發(fā)給終端。七.四.四組件模板在編寫頁面程序時,有一些模塊(如本程序使用地數(shù)據(jù)頁面菜單按鈕)需要重復使用,為了使得代碼簡潔明了,并且可以根據(jù)傳入地變量完成相應地設置,可以利用自定義組件地功能來實現(xiàn)相應地構(gòu)件。可在templates目錄下添加一個ponent文件,將功能模塊提取出來,抽象成一個自定義組件,以便在不同地頁面重復使用。然后在JS文件對有關屬行配置,此處使用地是一個對象,還可以在此文件添加功能函數(shù),如頁面跳轉(zhuǎn)或者動畫效果。但是需要在JSON文件行自定義組件聲明,并在使用該組件地頁面地JSON文件行如下引用。完成聲明后即可在頁面直接使用。同時,在js文件傳入頁面信息,編譯時會自動傳入有關變量,從而完成頁面地設計。這樣可以簡化之前復雜地代碼,只需要使用一條標簽即可使用相應地功能模塊。當需要修改時,也只需修改自定義組件文件,而不用修改使用該功能地所有頁面。七.五"照葫蘆畫瓢"開發(fā)自己地NB-IoT地微信小程序本節(jié)內(nèi)容主要描述了如何在微信小程序上添加開燈,關燈地按鈕,來控制UE終端藍燈地亮,暗情況地下行過程。先將"..\零四-Soft\ch零七-一文件夾復制至"..\零四-Soft\ch零七-二"文件夾(建議讀者另建文件夾),按照"四.二.二節(jié)"搭建自己地臨時服務器。首先啟動FRP客戶端,運行云偵聽畫瓢程序(即"..\零四-Soft\ch零四-二\CS-Monitor"),上電啟動終端UE畫瓢程序(即"..\零四-Soft\ch零四-二\User_NB")。下面將具體介紹如何在微信小程序"照葫蘆畫瓢"一.修改微信小程序工程地配置一)修改實時數(shù)據(jù)與實時曲線地偵聽地址打開微信小程序開發(fā)工具,導入電子資源"..\零四-Soft\ch零七-一\Wx-Client"文件夾,在實時數(shù)據(jù)頁面"pages/realtime-data/reaitime-data.wxml"與實時曲線頁面"pages/realtime-chart/realtime-chart.wxml"將偵聽地址修改為自己終端地IP地址與端口。二)修改wss地訪問地址將配置文件"app.js"地"wss地訪問地址"修改成wss:'ws://suda-mcu.:三五零零一/wsServices。二.添加控制小燈按鈕在微信小程序地實時數(shù)據(jù)頁面地realtime-data.wxss文件,添加兩個控制小燈按鈕。在realtime-data.wxml文件添加按鈕綁定。三.編寫"關燈/開燈"按鈕地btn_con_click在realtime-data.js文件添加對按鈕點擊地判斷,再執(zhí)行相應地操作。四.運行小程序并觀察現(xiàn)象在模擬器上運行微信小程序并入實時數(shù)據(jù)頁面,如圖七-九所示。在接收到數(shù)據(jù)地三零秒內(nèi),單擊"開燈"或"關燈"按鈕,數(shù)據(jù)會下行到終端UE,控制藍燈地亮或暗,此為下行過程;當終端UE回發(fā)數(shù)據(jù)時,數(shù)據(jù)會上行到微信小程序,此時小燈狀態(tài)變?yōu)?亮"或"暗",新增溫度就有了新地值,此為上行過程。圖七-九畫瓢程序運行效果圖七.六NB-IoT微信小程序模板地發(fā)布本節(jié)內(nèi)容主要描述了如何在微信小程序上添加開燈,關燈地按鈕,來控制UE終端藍燈地亮,暗情況地下行過程。先將"..\零四-Soft\ch零七-一文件夾復制至"..\零四-Soft\ch零七-二"文件夾(建議讀者另建文件夾),按照"四.二.二節(jié)"搭建自己地臨時服務器。首先啟動FRP客戶端,運行云偵聽畫瓢程序(即"..\零四-Soft\ch零四-二\CS-Monitor"),上電啟動終端UE畫瓢程序(即"..\零四-Soft\ch零四-二\User_NB")。下面將

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論