test_proj/AquaparkMonitor/AquaparkmonitForm.cs

247 lines
7.1 KiB
C#

using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Runtime.Serialization.Formatters.Binary;
using MiniHttpd;
namespace AquaparkMonitor
{
public partial class Aquamonit : Form
{
// server settings
string sServerSettingsXML = "MiniHttpdSettings.xml"; //plik XML dla serwera HTTP
int iServerPort = 3400;
string sHostName = "aquapark_monitor";
// app settings
string sSettingsAppFile = "settings.xml";
string sEsokDir = "C:\\esok_file\\"; //katalog pliku ESOK
string sNTPServer = "pl.pool.ntp.org";
string sEsokFilename = "statystyka_esok.xml";
int iIntervalSek = 10; // czas odswierzania danych w monitoringu w sekundach
int iTempDzie = 20;
int iTempRek = 20;
// serwer
HttpWebServer server = new HttpWebServer();
BasicAuthenticator auth = new BasicAuthenticator();
string sRootPath = Path.GetDirectoryName(Application.ExecutablePath) + "\\server\\";
// Load App Start Settings
private void LoadAppSettings()
{
XmlDocument doc;
XmlElement docElement;
try
{
doc = new XmlDocument();
doc.Load(sSettingsAppFile);
docElement = doc.DocumentElement;
}
catch
{
return;
}
}
// Load Server HTTP Settings
private void LoadSettings()
{
XmlDocument doc;
XmlElement docElement;
try
{
doc = new XmlDocument();
doc.Load(sServerSettingsXML);
docElement = doc.DocumentElement;
}
catch
{
return;
}
try
{
server.Port = int.Parse(docElement["Port"].InnerText);
}
catch { }
try
{
server.HostName = docElement["HostName"].InnerText;
}
catch { }
try
{
foreach (XmlElement user in docElement["Users"].ChildNodes)
{
auth.AddUserByHash(user["Name"].InnerText, user["Password"].InnerText);
}
}
//catch { }
finally
{
}
}
//zapis ustawien serwera do pliku
void SaveSettings()
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(SaveSettings));
return;
}
try
{
XmlDocument doc = new XmlDocument();
doc.AppendChild(doc.CreateElement("MiniHttpdSettings"));
XmlElement element;
XmlElement docElement = doc.DocumentElement;
element = doc.CreateElement("Port");
docElement.AppendChild(element);
element.InnerText = iServerPort.ToString();
element = doc.CreateElement("HostName");
docElement.AppendChild(element);
element.InnerText = sHostName;
element = doc.CreateElement("Users");
docElement.AppendChild(element);
if (auth.Users != null)
foreach (string username in auth.Users)
{
XmlElement user = doc.CreateElement("User");
XmlElement nameElement = doc.CreateElement("Name");
XmlElement passwordElement = doc.CreateElement("Password");
nameElement.InnerText = username;
passwordElement.InnerText = auth.GetPasswordHash(username);
user.AppendChild(nameElement);
user.AppendChild(passwordElement);
element.AppendChild(user);
}
doc.Save(sServerSettingsXML);
}
catch(Exception e)
{
Console.WriteLine("Error saving server settings:");
Console.WriteLine(e);
}
finally
{
}
}
public Aquamonit()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
server.Authenticator = auth;
server.RequireAuthentication = true;
server.Root = new DriveDirectory(sRootPath);
server.RequestReceived += server_RequestReceived;
//auth.AddUser("user", "user123");
//SaveSettings();
LoadSettings();
//start serwera
try
{
server.Start();
}
catch (Exception e2)
{
Console.Error.WriteLine(e2);
}
}
void server_RequestReceived(object sender, RequestEventArgs e)
{
HttpRequest request = e.Request;
switch (request.Method)
{
case "GET":
//Otwieramy plik i podmieniamy pola
break;
case "POST":
MemoryStream stream = request.PostData;
stream.Position = 0;
var sr = new StreamReader(stream);
string data = sr.ReadToEnd(); // POST data
// wykonujemy zapis danych do zmiennych
string post_data = Uri.UnescapeDataString(data);
string[] elements = post_data.Split('&'); //tworzymy tablice z elementami formularza
// iterujemy po wszystkich elementach
foreach (string ele in elements)
{
if (!string.IsNullOrEmpty(ele))
{
//kazdy element rozdzielamy na dwa
string[] in_el = ele.Split('=');
switch (in_el[0])
{
case "temp_dzie":
break;
case "temp_rek":
break;
case "interval":
break;
case "esok_dir":
break;
case "server_ntp":
break;
}
}
}
// ... i wywolujemy zapis do pliku z ustawieniami
//Console.WriteLine(Uri.UnescapeDataString(data));
break;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
server.Stop();
}
}
}