1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
|
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"
}
}
}
|