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
var path = require('path');
var interfaces = require(path.join(__dirname, 'iface_obj.js'));
const rosSrvName = "/rapp/rapp_weather_reporter/weather_forecast";
function svcImpl(req, resp, ros) {
var rosMsg = new interfaces.ros_req();
rosMsg.city = req.body.city;
rosMsg.weather_reporter = req.body.weather_reporter;
rosMsg.metric = req.body.metric;
function callback(data) {
var response = parseRosbridgeMsg( data );
resp.sendJson(response);
}
function onerror(e) {
var response = new interfaces.client_res();
response.error = e;
resp.sendJson(response);
}
ros.callService(rosSrvName, rosMsg, {success: callback, fail: onerror});
}
function parseRosbridgeMsg(rosbridge_msg)
{
var response = new interfaces.client_res();
const forecast = rosbridge_msg.forecast;
const error = rosbridge_msg.error;
if (error) {
response.error = error;
return response;
}
for (let i in forecast){
let forecastEntry = new interfaces.forecast_entry();
forecastEntry.high_temp = forecast[i].high_temperature;
forecastEntry.low_temp = forecast[i].low_temperature;
forecastEntry.description = forecast[i].description;
forecastEntry.date = forecast[i].date;
response.forecast.push(forecastEntry);
}
return response;
}
module.exports = svcImpl;