summaryrefslogtreecommitdiffstats
path: root/app/qml/Main.qml
blob: 7b99ca5890486bde0b3469ed3e1d4a043d2bd368 (plain)
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"
        }
    }
}