Showing
4 changed files
with
57 additions
and
25 deletions
... | @@ -9,8 +9,8 @@ var usersRouter = require('./routes/users'); | ... | @@ -9,8 +9,8 @@ var usersRouter = require('./routes/users'); |
9 | 9 | ||
10 | 10 | ||
11 | var app = express(), | 11 | var app = express(), |
12 | -server= require('http').createServer(app), | 12 | +server = require('http').createServer(app), |
13 | -SOCKETIO=require('./lib/socketio.js'); | 13 | +SOCKETIO = require('./lib/socketio.js'); |
14 | 14 | ||
15 | // view engine setup | 15 | // view engine setup |
16 | app.set('views', path.join(__dirname, 'views')); | 16 | app.set('views', path.join(__dirname, 'views')); | ... | ... |
... | @@ -20,12 +20,14 @@ module.exports = (server, app) => { | ... | @@ -20,12 +20,14 @@ module.exports = (server, app) => { |
20 | let Discomport_index = {}; | 20 | let Discomport_index = {}; |
21 | let Ultra_Violet_index = {}; | 21 | let Ultra_Violet_index = {}; |
22 | let Traffic_Accident = {}; | 22 | let Traffic_Accident = {}; |
23 | + let Death_Factors = []; | ||
23 | let sending_to_client_info = {}; | 24 | let sending_to_client_info = {}; |
24 | let client_send = {}; | 25 | let client_send = {}; |
25 | let client_name = ""; | 26 | let client_name = ""; |
26 | let client_birth ; | 27 | let client_birth ; |
27 | let Destiny; | 28 | let Destiny; |
28 | let sql; | 29 | let sql; |
30 | + | ||
29 | 31 | ||
30 | let Day3_Weather ={}; | 32 | let Day3_Weather ={}; |
31 | let info = {} | 33 | let info = {} |
... | @@ -137,6 +139,8 @@ module.exports = (server, app) => { | ... | @@ -137,6 +139,8 @@ module.exports = (server, app) => { |
137 | 139 | ||
138 | 140 | ||
139 | traffic: Traffic_Accident.totalCount, // 교통사고 발생횟수 | 141 | traffic: Traffic_Accident.totalCount, // 교통사고 발생횟수 |
142 | + death_factor: "", //사망요인 | ||
143 | + death_countdown: 0, //죽기까지 남은 시간(단위: 초) | ||
140 | death_prob: 0 //확률 | 144 | death_prob: 0 //확률 |
141 | } | 145 | } |
142 | console.log("API INFO \n", info); | 146 | console.log("API INFO \n", info); |
... | @@ -161,29 +165,50 @@ module.exports = (server, app) => { | ... | @@ -161,29 +165,50 @@ module.exports = (server, app) => { |
161 | + info.windspd*1 + (info.rain / 10) + (Math.abs(info.current_temperature - 15) / 10) //+ (info.traffic / 5) | 165 | + info.windspd*1 + (info.rain / 10) + (Math.abs(info.current_temperature - 15) / 10) //+ (info.traffic / 5) |
162 | ); | 166 | ); |
163 | 167 | ||
168 | + // ------------------------------ death_factor 정의 ------------------------------ | ||
169 | + | ||
170 | + if (info.typhoon == "Y") | ||
171 | + Death_Factors.push("태풍에 휩쓸려 사망"); | ||
172 | + if (info.lightning == 1) | ||
173 | + Death_Factors.push("번개에 맞아 사망"); | ||
174 | + if (info.warning == "Y") | ||
175 | + Death_Factors.push("우박에 머리를 맞아 사망"); | ||
176 | + if (info.windspd*1 >= 2) | ||
177 | + Death_Factors.push("애인에게 바람맞아 그 충격으로 인해 사망"); | ||
178 | + if (info.heat*1 >= 100) | ||
179 | + Death_Factors.push("학점이 너무 낮아 화병으로 사망"); | ||
180 | + if (info.discomport*1 >= 40) | ||
181 | + Death_Factors.push("날씨가 너무 찝찝해서 사망"); | ||
182 | + | ||
183 | + Death_Factors.push("심장마비로 사망"); //반드시 하나의 요인은 추가되어야 함 | ||
184 | + | ||
185 | + info.death_factor = Death_Factors[Math.round(Math.random()*Death_Factors.length)]; //사망요인 하나를 렌덤으로 고른다. | ||
186 | + | ||
187 | + | ||
164 | //이벤트 기반으로 일정 시간 간격으로 클라이언트에게 보낼 정보 | 188 | //이벤트 기반으로 일정 시간 간격으로 클라이언트에게 보낼 정보 |
165 | client_send = { | 189 | client_send = { |
166 | time: info.time, | 190 | time: info.time, |
167 | wind: info.windspd, | 191 | wind: info.windspd, |
168 | temperature: info.current_temperature, | 192 | temperature: info.current_temperature, |
169 | rain: info.rain, | 193 | rain: info.rain, |
170 | - death: info.death_prob | 194 | + death: info.death_prob, |
195 | + factor: info.death_factor, | ||
171 | }; | 196 | }; |
172 | function getRandom_add_prob(min, max) { | 197 | function getRandom_add_prob(min, max) { |
173 | return Math.random() * (max - min) + min; | 198 | return Math.random() * (max - min) + min; |
174 | - } | 199 | + } |
175 | 200 | ||
176 | 201 | ||
177 | - // 심장이 크게 뛰며 확률이 증가하거나 감소 할 수 있음 | 202 | + //심장이 크게 뛰며 확률이 증가하거나 감소 할 수 있음 |
178 | - Math.random() * 2 >= 1 ? client_send.death += getRandom_add_prob(0,5) : client_send.death -= getRandom_add_prob(0,5) ; | 203 | + Math.random() * 2 >= 1 ? client_send.death += getRandom_add_prob(0,5) : client_send.death -= getRandom_add_prob(0,5) ; |
179 | 204 | ||
180 | 205 | ||
181 | - //운명의 장난으로 죽을 확률이 증가하거나 감소함 | 206 | + //운명의 장난으로 죽을 확률이 증가하거나 감소함 |
182 | - const rand = Math.floor(Math.random() * 6) * 10//생년월일 중 한자리 뽑음 | 207 | + const rand = Math.floor(Math.random() * 6) * 10//생년월일 중 한자리 뽑음 |
183 | 208 | ||
184 | - Destiny=client_birth.charAt(rand)/3; //명시적 형 변환 | 209 | + Destiny=client_birth.charAt(rand)/3; //명시적 형 변환 |
185 | - if(Destiny==0)Destiny=1; //사용자 잘못 입력했을때 예외처리 | 210 | + if(Destiny==0)Destiny=1; //사용자 잘못 입력했을때 예외처리 |
186 | - Math.random() * 2 >= 1 ? client_send.death += Destiny : client_send.death -= Destiny ; | 211 | + Math.random() * 2 >= 1 ? client_send.death += Destiny : client_send.death -= Destiny ; |
187 | 212 | ||
188 | 213 | ||
189 | //만약 날이 너무 안좋아서 확률이 100을 넘긴다면 100으로 예외처리 | 214 | //만약 날이 너무 안좋아서 확률이 100을 넘긴다면 100으로 예외처리 |
... | @@ -197,8 +222,8 @@ module.exports = (server, app) => { | ... | @@ -197,8 +222,8 @@ module.exports = (server, app) => { |
197 | console.log("emit"); | 222 | console.log("emit"); |
198 | 223 | ||
199 | //db에 저장 | 224 | //db에 저장 |
200 | - sql = "INSERT INTO weather_info (time,wind,temperature,rain,prob) VALUES (?,?,?,?,?)"; | 225 | + sql = "INSERT INTO weather_info (time,wind,temperature,rain,prob,factor) VALUES (?,?,?,?,?,?)"; |
201 | - db.query(sql, [client_send.time, client_send.wind, client_send.temperature, client_send.rain, client_send.death], (err, result) => { | 226 | + db.query(sql, [client_send.time, client_send.wind, client_send.temperature, client_send.rain, client_send.death, client_send.factor], (err, result) => { |
202 | if (err) console.log(err); | 227 | if (err) console.log(err); |
203 | }) | 228 | }) |
204 | } catch (err) { //promise err or try err catch | 229 | } catch (err) { //promise err or try err catch | ... | ... |
... | @@ -81,6 +81,7 @@ router.get('/Cname/:Cname/Cbirth/:Cbirth', (req,res) => { | ... | @@ -81,6 +81,7 @@ router.get('/Cname/:Cname/Cbirth/:Cbirth', (req,res) => { |
81 | var wsArr = new Array(); // 풍속 | 81 | var wsArr = new Array(); // 풍속 |
82 | var rainArr = new Array(); // 강우량 | 82 | var rainArr = new Array(); // 강우량 |
83 | var probArr = new Array(); // 사망 확률 | 83 | var probArr = new Array(); // 사망 확률 |
84 | + var factorArr = new Array(); // 사망요인 | ||
84 | var dataLen = 0; // 데이터 개수 | 85 | var dataLen = 0; // 데이터 개수 |
85 | var empty = 0; // 초기값 유뮤, 0 : 자료 있음, 1 : 자료 없음 | 86 | var empty = 0; // 초기값 유뮤, 0 : 자료 있음, 1 : 자료 없음 |
86 | var sql = ""; // 쿼리 | 87 | var sql = ""; // 쿼리 |
... | @@ -110,6 +111,7 @@ router.get('/Cname/:Cname/Cbirth/:Cbirth', (req,res) => { | ... | @@ -110,6 +111,7 @@ router.get('/Cname/:Cname/Cbirth/:Cbirth', (req,res) => { |
110 | ptArr.unshift(rows[i].temperature); | 111 | ptArr.unshift(rows[i].temperature); |
111 | wsArr.unshift(rows[i].wind); | 112 | wsArr.unshift(rows[i].wind); |
112 | rainArr.unshift(rows[i].rain); | 113 | rainArr.unshift(rows[i].rain); |
114 | + factorArr.unshift(rows[i].factor); | ||
113 | count = count + 1; | 115 | count = count + 1; |
114 | 116 | ||
115 | if (count == 10){ | 117 | if (count == 10){ |
... | @@ -128,7 +130,8 @@ router.get('/Cname/:Cname/Cbirth/:Cbirth', (req,res) => { | ... | @@ -128,7 +130,8 @@ router.get('/Cname/:Cname/Cbirth/:Cbirth', (req,res) => { |
128 | probArr, | 130 | probArr, |
129 | dataLen, | 131 | dataLen, |
130 | name, | 132 | name, |
131 | - birth | 133 | + birth, |
134 | + factorArr, | ||
132 | }); | 135 | }); |
133 | } | 136 | } |
134 | }); | 137 | }); | ... | ... |
... | @@ -59,7 +59,7 @@ | ... | @@ -59,7 +59,7 @@ |
59 | 59 | ||
60 | <script src="/socket.io/socket.io.js"></script> | 60 | <script src="/socket.io/socket.io.js"></script> |
61 | <script type="text/javascript"> | 61 | <script type="text/javascript"> |
62 | - let client_data = { | 62 | + let client_data = { |
63 | birth: "<%=birth%>", | 63 | birth: "<%=birth%>", |
64 | name: "<%=name%>" | 64 | name: "<%=name%>" |
65 | } | 65 | } |
... | @@ -131,7 +131,7 @@ | ... | @@ -131,7 +131,7 @@ |
131 | }, | 131 | }, |
132 | tooltip: { | 132 | tooltip: { |
133 | headerFormat: "<b>{series.name}</b><br/>", | 133 | headerFormat: "<b>{series.name}</b><br/>", |
134 | - pointFormat: "{point.x:%Y년%m월%d일 %H시%M분}<br/>의 사망률 : {point.y:.2f}%" | 134 | + pointFormat: "{point.x:%Y년%m월%d일 %H시%M분}<br/>의 사망률 : {point.y:.2f}%<br/>사망요인 : {point.factor}" |
135 | }, | 135 | }, |
136 | legend: { | 136 | legend: { |
137 | //enabled: false | 137 | //enabled: false |
... | @@ -150,7 +150,7 @@ | ... | @@ -150,7 +150,7 @@ |
150 | enabled: false | 150 | enabled: false |
151 | }, | 151 | }, |
152 | 152 | ||
153 | -plotOptions: { | 153 | + plotOptions: { |
154 | series: { | 154 | series: { |
155 | marker: { | 155 | marker: { |
156 | radius: 6 | 156 | radius: 6 |
... | @@ -170,14 +170,16 @@ plotOptions: { | ... | @@ -170,14 +170,16 @@ plotOptions: { |
170 | for (; j < 10 - length; j++) { | 170 | for (; j < 10 - length; j++) { |
171 | deathArr.push({ | 171 | deathArr.push({ |
172 | x: time + i * 60000, | 172 | x: time + i * 60000, |
173 | - y: 0 | 173 | + y: 0, |
174 | + factor: "없음" | ||
174 | }) | 175 | }) |
175 | i++; | 176 | i++; |
176 | } | 177 | } |
177 | 178 | ||
178 | - <% probArr.forEach((probArr) => {%> | 179 | + <% for(var n; n < probArr.length; n++) {%> |
179 | - var temp; | 180 | + var temp, temp2; |
180 | - temp = <%=probArr %>; | 181 | + temp = <%=probArr[n] %>; |
182 | + temp2 = <%=factorArr[n] %>; | ||
181 | 183 | ||
182 | // for(;j<10;j++) | 184 | // for(;j<10;j++) |
183 | // { | 185 | // { |
... | @@ -190,11 +192,12 @@ plotOptions: { | ... | @@ -190,11 +192,12 @@ plotOptions: { |
190 | 192 | ||
191 | deathArr.push({ | 193 | deathArr.push({ |
192 | x: time + i * 60000, | 194 | x: time + i * 60000, |
193 | - y: temp | 195 | + y: temp, |
196 | + factor: temp2 | ||
194 | }) | 197 | }) |
195 | i++; | 198 | i++; |
196 | 199 | ||
197 | - <%}) %> | 200 | + <%} %> |
198 | 201 | ||
199 | return deathArr; | 202 | return deathArr; |
200 | })(), | 203 | })(), |
... | @@ -205,7 +208,6 @@ plotOptions: { | ... | @@ -205,7 +208,6 @@ plotOptions: { |
205 | 208 | ||
206 | }); | 209 | }); |
207 | 210 | ||
208 | - | ||
209 | var chart2 = Highcharts.chart("container2", { | 211 | var chart2 = Highcharts.chart("container2", { |
210 | chart: { | 212 | chart: { |
211 | type: "spline", | 213 | type: "spline", |
... | @@ -593,16 +595,18 @@ plotOptions: { | ... | @@ -593,16 +595,18 @@ plotOptions: { |
593 | 595 | ||
594 | 596 | ||
595 | }); | 597 | }); |
598 | + | ||
596 | var socket = io.connect('/', { transports: ['websocket'], upgrade: false }); | 599 | var socket = io.connect('/', { transports: ['websocket'], upgrade: false }); |
597 | socket.emit("connection", client_data); | 600 | socket.emit("connection", client_data); |
598 | socket.on("weatherInfo_minutely_send_to_client", (info) => { //서버에서 client에게 메세지 전송 | 601 | socket.on("weatherInfo_minutely_send_to_client", (info) => { //서버에서 client에게 메세지 전송 |
599 | console.log(info); | 602 | console.log(info); |
600 | 603 | ||
601 | - var date = new Date().getTime(); | 604 | + var date = new Date().getTime(); |
602 | 605 | ||
603 | chart1.series[0].addPoint({ | 606 | chart1.series[0].addPoint({ |
604 | x: date, | 607 | x: date, |
605 | y: info.death, | 608 | y: info.death, |
609 | + factor: info.factor, | ||
606 | color:"#FFE08C" | 610 | color:"#FFE08C" |
607 | }); | 611 | }); |
608 | chart2.series[0].addPoint({ | 612 | chart2.series[0].addPoint({ | ... | ... |
-
Please register or login to post a comment