Adding some Network stuff
This commit is contained in:
parent
9862d1cf51
commit
2d2af7f865
@ -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
|
||||
|
@ -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 {
|
||||
|
7
TimeKeeper/Exceptions/IllegalDataException.cs
Normal file
7
TimeKeeper/Exceptions/IllegalDataException.cs
Normal file
@ -0,0 +1,7 @@
|
||||
using System;
|
||||
|
||||
namespace TimeKeeper.Exceptions {
|
||||
class IllegalDataException : Exception {
|
||||
public IllegalDataException(string Message, Exception Inner) : base(Message, Inner) { }
|
||||
}
|
||||
}
|
75
TimeKeeper/Misc/UDPListener.cs
Normal file
75
TimeKeeper/Misc/UDPListener.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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]);
|
||||
}
|
||||
|
11
TimeKeeper/Models/Types/MyMessageArgs.cs
Normal file
11
TimeKeeper/Models/Types/MyMessageArgs.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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 {
|
||||
|
@ -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();
|
||||
|
@ -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" />
|
||||
|
@ -1,5 +1,6 @@
|
||||
[general]
|
||||
comport=COM4
|
||||
port=28654
|
||||
arduinoport=25987
|
||||
|
||||
[database]
|
||||
engine=Mysql
|
||||
|
Loading…
Reference in New Issue
Block a user