From 27c26952a5d1905f11ea4d8fe3d303fee82efd56 Mon Sep 17 00:00:00 2001 From: zheng_wenlong Date: Fri, 31 May 2019 12:44:40 +0900 Subject: change dbus to websocket --- app/qml/Main.qml | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) (limited to 'app/qml/Main.qml') diff --git a/app/qml/Main.qml b/app/qml/Main.qml index 4139cb9..2162e2e 100644 --- a/app/qml/Main.qml +++ b/app/qml/Main.qml @@ -1,5 +1,7 @@ import QtQuick 2.0 import QtQuick.Controls 2.2 +import QtWebSockets 1.0 +import QtPositioning 5.0 import "qrc:/qml" @@ -11,6 +13,167 @@ ApplicationWindow { width: 640 visible: true + property string tbt_navi_request_str: "" + property string api_str: "naviapi" + property string verb_getrouteinfo: "navicore_getrouteinfo" + property string verb_getallsessions: "navicore_getallsessions" + property string verb_subscribe: "subscribe" + property string verb_unsubscribe: "unsubscribe" + property string event_setdemorouteinfo: "naviapi/navicore_setdemorouteinfo" + property string event_arrivedest: "naviapi/navicore_arrivedest" + property string event_stopdemo: "naviapi/navicore_stopdemo" + property string event_setdestpos: "naviapi/navicore_setdestpos" + property string event_gps: "naviapi/navicore_gps" + property string event_getdestdir: "naviapi/navicore_getdestdir" + property var msgid_enu: { "call":2, "retok":3, "reterr":4, "event":5 } + + WebSocket { + id: websocket + url: bindingAddress + + onStatusChanged: { + if (websocket.status === WebSocket.Error){ + console.log ("Error: " + websocket.errorString) + websocket.active = false + countdown.start() + }else if (websocket.status === WebSocket.Open){ + console.log ("Socket Open") + do_getallsessions() + }else if (websocket.status === WebSocket.Closed){ + console.log ("Socket closed") + } + } + + onTextMessageReceived: { + console.log("tbtnavi:onTextMessageReceived: " + message) + var message_json = JSON.parse(message) + + //analyse the infomation from the naviapi service + if (message_json[0] === msgid_enu.event) + { + //set route infomation during the route demo + if(message_json[2].event === event_setdemorouteinfo) + { + var latitude = message_json[2].data[0].DemoLatitude + var longitude = message_json[2].data[0].DemoLongitude + var distance = message_json[2].data[0].DemoDistance + var direction = message_json[2].data[0].DemoDirection + console.log("tbtnavi: distance = " + distance + "direction = " + direction) + mapwindow.do_setDirection(direction) + mapwindow.do_setNextCrossDistance(distance) + } + //when arrive the destination + else if(message_json[2].event === event_arrivedest) + { + mapwindow.do_arrivedest() + } + //when the demo stopped + else if(message_json[2].event === event_stopdemo) + { + mapwindow.do_stopnavidemo() + mapwindow.do_setCoordinate(35.6673965582,139.7491882778) + mapwindow.startPoint = QtPositioning.coordinate(35.6673965582,139.7491882778); + } + //when add destination + else if(message_json[2].event === event_setdestpos) + { + var allroutes = message_json[2].data[0].AllRoutes + var destlat = message_json[2].data[0].DestinationLatitude + var destlon = message_json[2].data[0].DestinationLongitude + mapwindow.do_setdest(allroutes,destlat,destlon) + } + else if(message_json[2].event === event_gps){ + console.log ("tbt:Receive Event======event_gps") + var lat = message_json[2].data.latitude + var lon = message_json[2].data.longitude + console.log ("tbt:Receive Event lat====== " + lat+" "+"lon======"+lon) + mapwindow.do_setCoordinate(lat,lon) + + } + else if(message_json[2].event === event_getdestdir){ + var state = message_json[2].data.state + mapwindow.do_setTbtState(state) + } + } + else if (message_json[0] === msgid_enu.retok) + { + //when connect successed request the route infomation + if(message_json[2].request.info === verb_getallsessions) + { + do_getrouteinfo() + } + //add destination + else if(message_json[2].request.info === verb_getrouteinfo) + { + var routes = message_json[2].response[0].AllRoutes + var currentlat = message_json[2].response[0].CurrentLatitude + var currentlon = message_json[2].response[0].CurrentLongitude + var destposlat = message_json[2].response[0].DestinationLatitude + var destposlon = message_json[2].response[0].DestinationLongitude + mapwindow.do_addRoutePoint(currentlat,currentlon,destposlat,destposlon,routes) + } + } + else{ + console.log("Raw response: " + message) + } + } + active: false + } + + Timer { + id: countdown + repeat: false + interval: 3000 + triggeredOnStart: false + onTriggered: { + websocket.active = true + } + } + + onVisibleChanged: { + if (visible){ + if (!websocket.active){ + websocket.active = true + } + } + else { + countdown.stop() + if (websocket.active){ + do_unsubscribe("setdemopos") + do_unsubscribe("stopdemo") + do_unsubscribe("arrivedest") + } + } + } + + //make a connect to the naviapi service + function do_getallsessions() { + tbt_navi_request_str = '[' + msgid_enu.call + ',"99999","' + api_str+'/'+verb_getallsessions + '", {} ]' + console.log (tbt_navi_request_str) + websocket.sendTextMessage (tbt_navi_request_str) + } + + //get route information + function do_getrouteinfo() { + tbt_navi_request_str = '[' + msgid_enu.call + ',"99999","' + api_str+'/'+verb_getrouteinfo+ '", {}]' + console.log (tbt_navi_request_str) + websocket.sendTextMessage (tbt_navi_request_str) + } + + //subscribe + function do_subscribe( event ) { + tbt_navi_request_str = '[' + msgid_enu.call + ',"99999","' + api_str+'/'+verb_subscribe + '", {"value":"' + event + '"} ]' + console.log (tbt_navi_request_str) + websocket.sendTextMessage (tbt_navi_request_str) + } + + //unsubscribe + function do_unsubscribe( event ) { + tbt_navi_request_str = '[' + msgid_enu.call + ',"99999","' + api_str+'/'+verb_unsubscribe + '", {"value":"' + event + '"} ]' + console.log (tbt_navi_request_str) + websocket.sendTextMessage (tbt_navi_request_str) + } + Item { anchors.centerIn: parent width: parent.width -- cgit 1.2.3-korg