247 lines
7.1 KiB
C#
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();
|
|
}
|
|
|
|
}
|
|
}
|