- 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>(
connection.Metadata.Get<string>("formatType"));
while (true)
WeatherReport weatherReport;
while ((weatherReport = await formatter.ReadAsync(stream)) != null)
{
var weatherReport = await formatter.ReadAsync(stream);
lock(_lockObj)
{
_lastWeatherReport = weatherReport;

View File

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

View File

@ -5,9 +5,6 @@
<title>Social weather</title>
</head>
<body>
<div id="weatherDiv" display="none">
<p>Weather: <span id="current" /></p>
</div>
<form id="reportWeather" action="#">
<label for="temperature">Temperature</label><input type="number" id="temperature" value="72"/>
<label for="weather">Weather</label>
@ -19,18 +16,43 @@
<option value="MostlyCloudy">Mostly Cloudy</option>
<option value="Cloudy">Cloudy</option>
</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" />
</form>
<div>
<h3>Weather reports</h3>
<table id="reportsTable"></table>
</div>
<div>
<p>Status: <span id="status" /></p>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
function get(id) {
return document.getElementById(id);
}
function get(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) {
var span = get('status');
span.innerHTML = text;
@ -48,9 +70,7 @@
};
webSocket.onmessage = event => {
get('weatherDiv').style.display = 'block';
let weatherReport = JSON.parse(event.data);
get('current').innerHTML = event.data;
updateReport(JSON.parse(event.data));
}
webSocket.onclose = event => {