Adding some Network stuff

This commit is contained in:
BlubbFish 2016-06-08 15:57:16 +00:00
parent 9862d1cf51
commit 2d2af7f865
10 changed files with 141 additions and 52 deletions

View File

@ -1,24 +1,44 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
# Visual Studio 14
VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TimeKeeper", "TimeKeeper\TimeKeeper.csproj", "{25F58397-71CB-4298-979E-BAACE80C61CB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "..\Utils\Utils\Utils.csproj", "{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Zeit-V2", "Arduino\Zeit\Zeit-V2\Zeit-V2.vcxproj", "{C5F80730-F44F-4478-BDAE-6634EFC2CA88}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{25F58397-71CB-4298-979E-BAACE80C61CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{25F58397-71CB-4298-979E-BAACE80C61CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{25F58397-71CB-4298-979E-BAACE80C61CB}.Debug|x86.ActiveCfg = Debug|Any CPU
{25F58397-71CB-4298-979E-BAACE80C61CB}.Debug|x86.Build.0 = Debug|Any CPU
{25F58397-71CB-4298-979E-BAACE80C61CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{25F58397-71CB-4298-979E-BAACE80C61CB}.Release|Any CPU.Build.0 = Release|Any CPU
{25F58397-71CB-4298-979E-BAACE80C61CB}.Release|x86.ActiveCfg = Release|Any CPU
{25F58397-71CB-4298-979E-BAACE80C61CB}.Release|x86.Build.0 = Release|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|x86.ActiveCfg = Debug|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|x86.Build.0 = Debug|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.Build.0 = Release|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|x86.ActiveCfg = Release|Any CPU
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|x86.Build.0 = Release|Any CPU
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|Any CPU.ActiveCfg = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.ActiveCfg = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.Build.0 = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|Any CPU.ActiveCfg = Release|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.ActiveCfg = Release|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TimeKeeper.Exceptions {
class DbConnectException : Exception {

View File

@ -0,0 +1,7 @@
using System;
namespace TimeKeeper.Exceptions {
class IllegalDataException : Exception {
public IllegalDataException(string Message, Exception Inner) : base(Message, Inner) { }
}
}

View File

@ -0,0 +1,75 @@
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using TimeKeeper.Models.Types;
namespace TimeKeeper {
class UDPListener {
private int m_portToListen = 2003;
private volatile bool listening;
Thread m_ListeningThread;
public event EventHandler<MyMessageArgs> NewMessageReceived;
UdpClient listener = null;
private IPAddress lastAddress;
private Int32 tport;
//constructor
public UDPListener(int port, int targetPort) {
this.tport = targetPort;
this.listening = false;
this.m_portToListen = port;
this.listener = new UdpClient(this.m_portToListen);
}
public void StartListener() {
if(!this.listening) {
m_ListeningThread = new Thread(ListenForUDPPackages);
m_ListeningThread.IsBackground = true;
this.listening = true;
m_ListeningThread.Start();
}
}
public void StopListener() {
this.listening = false;
this.listener.Close();
}
public void ListenForUDPPackages() {
try {
} catch(SocketException) {
//do nothing
}
if(this.listener != null) {
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, m_portToListen);
try {
while(this.listening) {
Console.WriteLine("Waiting for UDP broadcast to port " + m_portToListen);
byte[] bytes = this.listener.Receive(ref groupEP);
this.lastAddress = groupEP.Address;
string s = Encoding.ASCII.GetString(bytes);
//raise event
NewMessageReceived(this, new MyMessageArgs(s));
}
} catch(Exception e) {
Console.WriteLine(e.ToString());
} finally {
this.listener.Close();
Console.WriteLine("Done listening for UDP broadcast");
}
}
}
internal void WriteLine(String text) {
byte[] s = Encoding.ASCII.GetBytes(text);
IPEndPoint endpoint = new IPEndPoint(this.lastAddress, this.tport);
this.listener.SendAsync(s, s.Length, endpoint);
}
}
}

View File

@ -1,20 +1,16 @@
using BlubbFish.Utils;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using TimeKeeper.Exceptions;
using TimeKeeper.Models.Types;
namespace TimeKeeper.Models {
class Tray : OwnModel<Tray> {
private Boolean isConnectedValue = false;
private TimeSpan OffsetTimeValue = new TimeSpan();
private SerialPort serial;
private Thread serialConnectThread;
private UDPListener network;
private Thread setTimeThread;
private InIReader settingsfile;
private FileLogger sLogger;
@ -23,7 +19,7 @@ namespace TimeKeeper.Models {
private Boolean initComplete = false;
private Tray() {
this.sLogger = FileLogger.getInstance("serial.log", false);
this.sLogger = FileLogger.getInstance("network.log", false);
this.init();
}
@ -50,21 +46,18 @@ namespace TimeKeeper.Models {
override protected void init() {
this.settingsfile = InIReader.getInstance("settings.ini");
this.serial = new SerialPort(this.settingsfile.getValue("general", "comport"));
this.serial.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
this.serialConnectThread = new Thread(connectRunner);
this.serialConnectThread.Start();
this.network = new UDPListener(Int32.Parse(this.settingsfile.getValue("general", "port")), Int32.Parse(this.settingsfile.getValue("general", "arduinoport")));
this.network.NewMessageReceived += DataReceivedHandler;
this.network.StartListener();
this.setTimeThread = new Thread(timeRunner);
this.setTimeThread.Start();
this.DatabaseModel = Database.Instance;
}
internal void Dispose() {
this.serialConnectThread.Abort();
this.setTimeThread.Abort();
if(this.serial.IsOpen) {
this.serial.Close();
}
this.network.NewMessageReceived -= DataReceivedHandler;
this.network.StopListener();
}
private void timeRunner() {
@ -78,39 +71,25 @@ namespace TimeKeeper.Models {
}
}
private void connectRunner() {
while(true) {
if(!this.serial.IsOpen) {
try {
this.serial.Open();
this.serial.DtrEnable = true;
this.isConnected = true;
this.serial.WriteLine("");
} catch(Exception) {
this.isConnected = false;
}
}
Thread.Sleep(1000 * 60); //Check Every Minute
}
}
private void DataReceivedHandler(Object sender, SerialDataReceivedEventArgs e) {
SerialPort sp = (SerialPort)sender;
string s = sp.ReadLine().Trim();
sLogger.setLine("<-: " + s, DateTime.Now);
this.parseSerial(s);
private void DataReceivedHandler(Object sender, MyMessageArgs s) {
sLogger.setLine("<-: " + s.data, DateTime.Now);
this.parseSerial(s.data);
}
[MethodImpl(MethodImplOptions.Synchronized)]
private void DataSendHandler(String v) {
sLogger.setLine("->: " + v, DateTime.Now);
this.serial.WriteLine(v);
this.network.WriteLine(v);
}
private void parseSerial(String s) {
if(s == "requestKeep=1") {
this.DataSendHandler("keep=1");
} else if(s == "Init...." || s == "Init loading!") {
} else if(s == "Init...." ||
s == "Init loading!" ||
s == "Start Network!" ||
s == "DHCP Request" ||
s == "Ethernet Started! IP: 129.26.160.107.") {
//Ignore that Stuff
} else if(s == "Init finished!") {
this.initComplete = true;
@ -139,6 +118,9 @@ namespace TimeKeeper.Models {
time = time.AddSeconds(int.Parse(t[1])).ToLocalTime();
} else if(t[0] == "job") {
jobID = int.Parse(t[1]);
if(jobID == -1) {
throw new IllegalDataException("JobID ist -1", null);
}
} else if(t[0] == "online") {
working = int.Parse(t[1]);
}

View File

@ -0,0 +1,11 @@
using System;
namespace TimeKeeper.Models.Types {
public class MyMessageArgs : EventArgs {
public string data { get; set; }
public MyMessageArgs(string newData) {
data = newData;
}
}
}

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TimeKeeper.Models.Types {
class WorkMessage {

View File

@ -1,13 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BlubbFish.Utils;
namespace TimeKeeper {
class Program {
static void Main(string[] args) {
FileLogger.setLogDir("logs");
try {
Controller.Tray t = new Controller.Tray();
t.execute();

View File

@ -62,10 +62,13 @@
<Compile Include="Database\DatabaseEngine.cs" />
<Compile Include="Database\TDatabase.cs" />
<Compile Include="Exceptions\DbConnectException.cs" />
<Compile Include="Exceptions\IllegalDataException.cs" />
<Compile Include="Misc\UDPListener.cs" />
<Compile Include="Misc\Utils.cs" />
<Compile Include="Models\MDatabase.cs" />
<Compile Include="Models\MTray.cs" />
<Compile Include="Models\MWindow.cs" />
<Compile Include="Models\Types\MyMessageArgs.cs" />
<Compile Include="Models\Types\WorkMessage.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View File

@ -1,5 +1,6 @@
[general]
comport=COM4
port=28654
arduinoport=25987
[database]
engine=Mysql