import QtQuick 2.0 import QtQuick.Controls 2.2 import QtWebSockets 1.0 import QtPositioning 5.0 import "qrc:/qml" ApplicationWindow { id: window title: "Turn By Turn Navigation Demo" height: 720 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 height: parent.height MapWindow { id:mapwindow anchors.fill: parent objectName: "mapwindow" } } }