// 解析ボタン
var anlyzeButton = new Button(10, 50, "解析");
anlyzeButton.Show();
asd.Engine.AddObject2D(anlyzeButton.getBackTexture());
asd.Engine.AddObject2D(anlyzeButton.getTextObject());
buttons.Add(anlyzeButton);
anlyzeButton.SetAction(() =>
{
});
// セーブボタン
var saveButton = new Button(10, 90, "セーブ");
saveButton.Show();
asd.Engine.AddObject2D(saveButton.getBackTexture());
asd.Engine.AddObject2D(saveButton.getTextObject());
buttons.Add(saveButton);
saveButton.SetAction(() =>
{
FileAccess.Save(rowNumberSquare, colNumberSquare);
});
// ロードボタン
var loadButton = new Button(10, 130, "ロード");
loadButton.Show();
asd.Engine.AddObject2D(loadButton.getBackTexture());
asd.Engine.AddObject2D(loadButton.getTextObject());
buttons.Add(loadButton);
loadButton.SetAction(() =>
{
FileAccess.Load(ref rowNumberSquare, ref colNumberSquare);
});
入力データを保存、読み取りするコードを書いていきます。
[JsonObject("dataModel")]
class Data
{
[JsonProperty("rowdata")]
public List<List<int>> RowData { get; set; }
[JsonProperty("coldata")]
public List<List<int>> ColData { get; set; }
}
class FileAccess
{
private const string _filename = "save.dat";
public static void Save(List<List<NumberSquare>> row, List<List<NumberSquare>> col)
{
if (File.Exists(_filename) == true)
{
File.Delete(_filename);
}
Data data = new Data();
data.RowData = new List<List<int>>();
foreach(var r in row)
{
List<int> list = new List<int>();
foreach(var s in r)
{
if(s.GetValue() != 0)
{
list.Add(s.GetValue());
}
}
data.RowData.Add(list);
}
data.ColData = new List<List<int>>();
foreach (var c in col)
{
List<int> list = new List<int>();
foreach (var s in c)
{
if (s.GetValue() != 0)
{
list.Add(s.GetValue());
}
}
data.ColData.Add(list);
}
var str = JsonConvert.SerializeObject(data);
using (var stream = new StreamWriter(_filename, true))
{
stream.Write(str);
}
}
public static void Load(ref List<List<NumberSquare>> rowList, ref List<List<NumberSquare>> colList)
{
foreach(var r in rowList)
{
foreach(var s in r)
{
asd.Engine.RemoveObject2D(s.getBackTexture());
asd.Engine.RemoveObject2D(s.getTextObject());
}
}
foreach (var c in colList)
{
foreach (var s in c)
{
asd.Engine.RemoveObject2D(s.getBackTexture());
asd.Engine.RemoveObject2D(s.getTextObject());
}
}
string str = string.Empty;
using (var stream = new StreamReader(_filename, true))
{
str = stream.ReadToEnd();
}
var data = JsonConvert.DeserializeObject<Data>(str);
rowList = new List<List<NumberSquare>>();
{
int row = 0;
foreach (var r in data.RowData)
{
List<NumberSquare> list = new List<NumberSquare>();
int col = -1;
foreach (var v in r)
{
var s = new NumberSquare(row, col);
s.SetValue(v.ToString());
asd.Engine.AddObject2D(s.getBackTexture());
asd.Engine.AddObject2D(s.getTextObject());
list.Add(s);
col--;
}
{
var s = new NumberSquare(row, col);
s.SetValue("0");
asd.Engine.AddObject2D(s.getBackTexture());
asd.Engine.AddObject2D(s.getTextObject());
list.Add(s);
}
rowList.Add(list);
row++;
}
}
colList = new List<List<NumberSquare>>();
{
int col = 0;
foreach (var c in data.ColData)
{
List<NumberSquare> list = new List<NumberSquare>();
int row = -1;
foreach (var v in c)
{
var s = new NumberSquare(row, col);
s.SetValue(v.ToString());
asd.Engine.AddObject2D(s.getBackTexture());
asd.Engine.AddObject2D(s.getTextObject());
list.Add(s);
row--;
}
{
var s = new NumberSquare(row, col);
s.SetValue("0");
asd.Engine.AddObject2D(s.getBackTexture());
asd.Engine.AddObject2D(s.getTextObject());
list.Add(s);
}
colList.Add(list);
col++;
}
}
}
}
[JsonObject("sensorModel")]
class Sensor
{
[JsonProperty("temperature")]
public int Temperature { get; set; }
[JsonProperty("humidity")]
public int Humidity { get; set; }
[JsonProperty("pressure")]
public int Pressure { get; set; }
}
クラス名は何でもいいですが、パラメータの名前は送信側と合わせる必要があります。
最後にViewModelの処理です。
public class MainWindowViewModel : BindableBase
{
private string _title = "ラズパイモニター";
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
private int _temperature;
private int _humidity;
private int _pressure;
public int Temperature
{
get { return _temperature; }
set { SetProperty(ref _temperature, value); }
}
public int Humidity
{
get { return _humidity; }
set { SetProperty(ref _humidity, value); }
}
public int Pressure
{
get { return _pressure; }
set { SetProperty(ref _pressure, value); }
}
public DelegateCommand ButtonClickCommand { get; }
public MainWindowViewModel()
{
ButtonClickCommand = new DelegateCommand(() =>
{
Thread thread = new Thread(new ThreadStart(() => {
try
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://192.168.1.3:8000/");
listener.Start();
while (true)
{
HttpListenerContext context = listener.GetContext();
HttpListenerRequest req = context.Request;
using (StreamReader reader = new StreamReader(req.InputStream, req.ContentEncoding))
{
string s = reader.ReadToEnd();
Sensor sensor = JsonConvert.DeserializeObject<Sensor>(s);
Temperature = sensor.Temperature;
Humidity = sensor.Humidity;
Pressure = sensor.Pressure;
}
HttpListenerResponse res = context.Response;
res.StatusCode = 200;
byte[] content = Encoding.UTF8.GetBytes("HELLO");
res.OutputStream.Write(content, 0, content.Length);
res.Close();
}
}
catch (Exception ex)
{
}
}));
thread.Start();
});
}
}