- infinite loop when a client disconnects
- enum values serialization

Replacing reports div with a table
This commit is contained in:
Pawel Kadluczka 2016-11-06 00:12:43 -07:00 committed by moozzyk
parent 08cd20f1a0
commit b5cef59448
3 changed files with 36 additions and 17 deletions

View File

@ -34,9 +34,9 @@ namespace SocialWeather
var formatter = _formatterResolver.GetFormatter<WeatherReport>( var formatter = _formatterResolver.GetFormatter<WeatherReport>(
connection.Metadata.Get<string>("formatType")); connection.Metadata.Get<string>("formatType"));
while (true) WeatherReport weatherReport;
while ((weatherReport = await formatter.ReadAsync(stream)) != null)
{ {
var weatherReport = await formatter.ReadAsync(stream);
lock(_lockObj) lock(_lockObj)
{ {
_lastWeatherReport = weatherReport; _lastWeatherReport = weatherReport;

View File

@ -1,7 +1,5 @@
using System; using Newtonsoft.Json;
using System.Collections.Generic; using Newtonsoft.Json.Converters;
using System.Linq;
using System.Threading.Tasks;
namespace SocialWeather namespace SocialWeather
{ {
@ -13,6 +11,7 @@ namespace SocialWeather
public long ReportTime { get; set; } public long ReportTime { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public Weather Weather { get; set; } public Weather Weather { get; set; }
public string ZipCode { get; set; } public string ZipCode { get; set; }

View File

@ -5,9 +5,6 @@
<title>Social weather</title> <title>Social weather</title>
</head> </head>
<body> <body>
<div id="weatherDiv" display="none">
<p>Weather: <span id="current" /></p>
</div>
<form id="reportWeather" action="#"> <form id="reportWeather" action="#">
<label for="temperature">Temperature</label><input type="number" id="temperature" value="72"/> <label for="temperature">Temperature</label><input type="number" id="temperature" value="72"/>
<label for="weather">Weather</label> <label for="weather">Weather</label>
@ -19,18 +16,43 @@
<option value="MostlyCloudy">Mostly Cloudy</option> <option value="MostlyCloudy">Mostly Cloudy</option>
<option value="Cloudy">Cloudy</option> <option value="Cloudy">Cloudy</option>
</select> </select>
<label for="zipCode">Zip</label><input type="text" id="zipCode" /> <label for="zipCode">Zip</label><input type="text" id="zipCode" value="98052" />
<input type="submit" value="Send report" /> <input type="submit" value="Send report" />
</form> </form>
<div>
<h3>Weather reports</h3>
<table id="reportsTable"></table>
</div>
<div> <div>
<p>Status: <span id="status" /></p> <p>Status: <span id="status" /></p>
</div> </div>
<script> <script>
document.addEventListener('DOMContentLoaded', () => { function get(id) {
function get(id) { return document.getElementById(id);
return document.getElementById(id); }
}
function updateReport(report) {
if (report.ZipCode) {
let row = get('report' + report.ZipCode);
if (row) {
while (row.hasChildNodes()) {
row.removeChild(row.lastChild);
}
}
else {
row = document.createElement('tr');
row.id = 'report' + report.ZipCode;
get('reportsTable').appendChild(row);
}
row.innerHTML = `
<td>${report.ZipCode}</td>
<td>${report.Temperature}&#8457; </td>
<td>${report.Weather.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")}</td>
<td>${report.ReportTime}</td>`;
}
}
document.addEventListener('DOMContentLoaded', () => {
function updateStatus(text, color) { function updateStatus(text, color) {
var span = get('status'); var span = get('status');
span.innerHTML = text; span.innerHTML = text;
@ -48,9 +70,7 @@
}; };
webSocket.onmessage = event => { webSocket.onmessage = event => {
get('weatherDiv').style.display = 'block'; updateReport(JSON.parse(event.data));
let weatherReport = JSON.parse(event.data);
get('current').innerHTML = event.data;
} }
webSocket.onclose = event => { webSocket.onclose = event => {