diff --git a/02_Windows_App/Perun_v1/01_Classes/DatabaseController.cs b/02_Windows_App/Perun_v1/01_Classes/DatabaseController.cs
index 0478575..3900a07 100644
--- a/02_Windows_App/Perun_v1/01_Classes/DatabaseController.cs
+++ b/02_Windows_App/Perun_v1/01_Classes/DatabaseController.cs
@@ -16,9 +16,9 @@ public class DatabaseController
string strUDPFrameType = strUDPFrame.type;
string strUDPFrameTimestamp = strUDPFrame.timestamp;
string strUDPFrameInstance = strUDPFrame.instance;
- string strUDPFramePayload = "";
- string strUDPFramePayload_Perun = "";
- string strSQLQueryTxt = "";
+ string strUDPFramePayload;
+ string strUDPFramePayload_Perun;
+ string strSQLQueryTxt;
// Some frames may come without timestamp, use database currrent timestampe then
@@ -86,48 +86,58 @@ public class DatabaseController
}
// Connect to mysql and execute sql
- connMySQL = new MySqlConnection(strMySQLConnectionString);
try
{
- Console.WriteLine("Sending data to MySQL - Begin");
- connMySQL.Open();
- bStatus = true;
- MySqlCommand cmdMySQL = new MySqlCommand(strSQLQueryTxt, connMySQL);
- MySqlDataReader rdrMySQL = cmdMySQL.ExecuteReader();
+ connMySQL = new MySqlConnection(strMySQLConnectionString);
- while (rdrMySQL.Read())
+ try
{
- Console.WriteLine(rdrMySQL[0] + " -- " + rdrMySQL[1]);
+ Console.WriteLine("Sending data to MySQL - Begin");
+ connMySQL.Open();
+ bStatus = true;
+ MySqlCommand cmdMySQL = new MySqlCommand(strSQLQueryTxt, connMySQL);
+ MySqlDataReader rdrMySQL = cmdMySQL.ExecuteReader();
+
+ while (rdrMySQL.Read())
+ {
+ Console.WriteLine(rdrMySQL[0] + " -- " + rdrMySQL[1]);
+ }
+ rdrMySQL.Close();
+ PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#" + strUDPFrameInstance + " > MySQL updated, package type: " + strUDPFrameType);
}
- rdrMySQL.Close();
- PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#"+strUDPFrameInstance + " > MySQL updated, package type: " + strUDPFrameType);
- }
- catch (ArgumentException a_ex)
- {
- // General exception found
- Console.WriteLine(a_ex.ToString());
- PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - package type: " + strUDPFrameType);
- bStatus = false;
- }
- catch (MySqlException m_ex)
- {
- // MySQL exception found
- PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - package type: " + strUDPFrameType);
- switch (m_ex.Number)
+ catch (ArgumentException a_ex)
{
- case 1042: // Unable to connect to any of the specified MySQL hosts (Check Server,Port)
- PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - unable to connect");
- break;
- case 0: // Access denied (Check DB name,username,password)
- PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - access denied");
- break;
- default:
- PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - " + m_ex.Number);
- break;
+ // General exception found
+ Console.WriteLine(a_ex.ToString());
+ PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - package type: " + strUDPFrameType);
+ bStatus = false;
}
- bStatus = false;
+ catch (MySqlException m_ex)
+ {
+ // MySQL exception found
+ PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - package type: " + strUDPFrameType);
+ switch (m_ex.Number)
+ {
+ case 1042: // Unable to connect to any of the specified MySQL hosts (Check Server,Port)
+ PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - unable to connect");
+ break;
+ case 0: // Access denied (Check DB name,username,password)
+ PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - access denied");
+ break;
+ default:
+ PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - " + m_ex.Number);
+ break;
+ }
+ bStatus = false;
+ }
+ connMySQL.Close();
+ Console.WriteLine("Sending data to MySQL - Done");
}
- connMySQL.Close();
- Console.WriteLine("Sending data to MySQL - Done");
+ catch (ArgumentException)
+ {
+ PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - wrong connection parameters");
+ }
+
+
}
}
diff --git a/02_Windows_App/Perun_v1/01_Classes/Program.cs b/02_Windows_App/Perun_v1/01_Classes/Program.cs
index 7d0dff1..59686ac 100644
--- a/02_Windows_App/Perun_v1/01_Classes/Program.cs
+++ b/02_Windows_App/Perun_v1/01_Classes/Program.cs
@@ -17,7 +17,6 @@ namespace Perun_v1
static void Main()
{
- // Only instance
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
diff --git a/02_Windows_App/Perun_v1/01_Classes/TCPController.cs b/02_Windows_App/Perun_v1/01_Classes/TCPController.cs
index e093bca..6ca157b 100644
--- a/02_Windows_App/Perun_v1/01_Classes/TCPController.cs
+++ b/02_Windows_App/Perun_v1/01_Classes/TCPController.cs
@@ -7,67 +7,63 @@ using System.Text;
using System.Threading;
using System.Windows.Forms;
-internal class TCPController
+public class TCPController
{
// Main class for TCP listener
- public static int intListenPort; // Port to connect to
- public static bool boolDone; // Helper to exit main loop without killing thread
- public static TcpListener tcpServer; // Listener object
- public static string[] arrLogHistory; // Log history for GUI
- public static string[] arrSendBuffer; // Mysql send buffer
- public static Thread thrTCPListener; // Seperate thread for UDP
+ public int intListenPort; // Port to connect to
+ public bool bDone; // Helper to exit main loop without killing thread
+ public string[] arrLogHistory; // Log history for GUI
+ public string[] arrSendBuffer; // Mysql send buffer
+ public Thread thrTCPListener; // Seperate thread for TCP
+ public bool bStatus; // TCP connecion status
- public static void Create(int intListenPort, ref string[] arrLogHistory, ref string[] arrSendBuffer)
+ public void Create(int par_intListenPort, ref string[] par_arrLogHistory, ref string[] par_arrSendBuffer)
{
// Create class
- TCPController.intListenPort = intListenPort;
- TCPController.arrLogHistory = arrLogHistory;
- TCPController.arrSendBuffer = arrSendBuffer;
+ intListenPort = par_intListenPort;
+ arrLogHistory = par_arrLogHistory;
+ arrSendBuffer = par_arrSendBuffer;
+ bDone = false;
+ bStatus = false;
}
- public static void StopListen()
+ public void StopListen()
{
- // FInish listening
- TCPController.boolDone = true;
- TCPController.tcpServer.Stop();
- TCPController.tcpServer = null;
+ // Finish listening
+ bDone = true;
+ bStatus = false;
for (int i = 0; i < arrSendBuffer.Length - 1; i++)
{
arrSendBuffer[i] = null;
}
-
}
- public static void StartListen()
+ public void StartListen()
{
- Console.WriteLine("TCP Listen start");
- while (!TCPController.boolDone)
+ while (!bDone)
{
+ Console.WriteLine("TCP Listen start");
+ TcpListener tcpServer = new TcpListener(IPAddress.Any, intListenPort); ; // Listener object
+
try
{
// Start listening to TCP
- tcpServer = new TcpListener(IPAddress.Any, intListenPort);
string strReceivedData;
// Start the main loop
- TCPController.boolDone = false;
tcpServer.Start();
- while (!TCPController.boolDone)
+ bStatus = true;
+ while (!bDone)
{
// Start listening
Console.WriteLine("TCP: Waiting for packet");
TcpClient tcpClient = tcpServer.AcceptTcpClient(); //if a connection exists, the server will accept it
NetworkStream ns = tcpClient.GetStream(); //networkstream is used to send/receive messages
- //tcpClient.ReceiveBufferSize = 65534;
- while (tcpClient.Connected && !TCPController.boolDone) //while the client is connected, we look for incoming messages
+ while (tcpClient.Connected && !bDone) //while the client is connected, we look for incoming messages
{
- //arrReceiveByteArray = new byte[tcpClient.ReceiveBufferSize]; //the messages arrive as byte array
- //ns.Read(arrReceiveByteArray, 0, arrReceiveByteArray.Length); //the same networkstream reads the message sent by the client
- //strReceivedData = Encoding.ASCII.GetString(arrReceiveByteArray, 0, arrReceiveByteArray.Length);
-
StringBuilder CompleteMessage = new StringBuilder();
if (ns.CanRead)
@@ -87,24 +83,33 @@ internal class TCPController
strReceivedData = CompleteMessage.ToString();
Console.WriteLine("Sender: {0} Payload: {1}", null, strReceivedData);
- dynamic dynamicRawTCPFrame = JsonConvert.DeserializeObject(strReceivedData); // Deserialize received frame
- string strRawTCPFrameType = dynamicRawTCPFrame.type;
-
- PerunHelper.LogHistoryAdd(ref arrLogHistory, "TCP packet received, type: " + strRawTCPFrameType);
-
- // Add to mySQL send buffer (find first empty slot)
- for (int i = 0; i < arrSendBuffer.Length - 1; i++)
+ try
{
- if (arrSendBuffer[i] == null)
+ dynamic dynamicRawTCPFrame = JsonConvert.DeserializeObject(strReceivedData); // Deserialize received frame
+ string strRawTCPFrameType = dynamicRawTCPFrame.type;
+
+ PerunHelper.LogHistoryAdd(ref arrLogHistory, "TCP packet received, type: " + strRawTCPFrameType);
+
+ // Add to mySQL send buffer (find first empty slot)
+ for (int i = 0; i < arrSendBuffer.Length - 1; i++)
{
- arrSendBuffer[i] = strReceivedData;
- break;
+ if (arrSendBuffer[i] == null)
+ {
+ arrSendBuffer[i] = strReceivedData;
+ break;
+ }
}
}
+ catch(Exception e)
+ {
+ Console.WriteLine(e.ToString());
+ PerunHelper.LogHistoryAdd(ref arrLogHistory, "TCP ERROR incorrect JSON");
+ }
}
}
tcpServer.Stop();
+ bStatus = false;
}
catch (Exception e)
{
@@ -114,8 +119,14 @@ internal class TCPController
Console.WriteLine(e.ToString());
PerunHelper.LogHistoryAdd(ref arrLogHistory, "TCP error - connection closed or port in use");
}
+
}
- //Console.WriteLine("TCP listen stop");
+ if (!(tcpServer is null))
+ {
+ tcpServer.Stop();
+ }
+ bStatus = false;
+ Console.WriteLine("TCP listen stop");
}
}
}
diff --git a/02_Windows_App/Perun_v1/02_Forms/form_Main.Designer.cs b/02_Windows_App/Perun_v1/02_Forms/form_Main.Designer.cs
index 6ff0e75..36951ba 100644
--- a/02_Windows_App/Perun_v1/02_Forms/form_Main.Designer.cs
+++ b/02_Windows_App/Perun_v1/02_Forms/form_Main.Designer.cs
@@ -96,7 +96,7 @@
this.con_Button_Listen_ON.Name = "con_Button_Listen_ON";
this.con_Button_Listen_ON.Size = new System.Drawing.Size(86, 39);
this.con_Button_Listen_ON.TabIndex = 2;
- this.con_Button_Listen_ON.Text = "Connect";
+ this.con_Button_Listen_ON.Text = "Start";
this.con_Button_Listen_ON.UseVisualStyleBackColor = true;
this.con_Button_Listen_ON.Click += new System.EventHandler(this.con_Button_Listen_ON_Click);
//
@@ -107,7 +107,7 @@
this.con_Button_Listen_OFF.Name = "con_Button_Listen_OFF";
this.con_Button_Listen_OFF.Size = new System.Drawing.Size(86, 39);
this.con_Button_Listen_OFF.TabIndex = 3;
- this.con_Button_Listen_OFF.Text = "Disconnect";
+ this.con_Button_Listen_OFF.Text = "Stop";
this.con_Button_Listen_OFF.UseVisualStyleBackColor = true;
this.con_Button_Listen_OFF.Click += new System.EventHandler(this.con_Button_Listen_OFF_Click);
//
@@ -156,7 +156,6 @@
//
// con_txt_mysql_port
//
- this.con_txt_mysql_port.Enabled = false;
this.con_txt_mysql_port.Location = new System.Drawing.Point(106, 45);
this.con_txt_mysql_port.Name = "con_txt_mysql_port";
this.con_txt_mysql_port.Size = new System.Drawing.Size(207, 20);
diff --git a/02_Windows_App/Perun_v1/02_Forms/form_Main.cs b/02_Windows_App/Perun_v1/02_Forms/form_Main.cs
index 11d2797..a9a3360 100644
--- a/02_Windows_App/Perun_v1/02_Forms/form_Main.cs
+++ b/02_Windows_App/Perun_v1/02_Forms/form_Main.cs
@@ -10,18 +10,22 @@ namespace Perun_v1
public partial class form_Main : Form
{
// Variable definitions
- public string[] arrSendBuffer = new string[65534]; // Mysql send buffer
- public bool boolLetMeOut = false; // Helper to handle system tray
- public DatabaseController dbConnection = new DatabaseController();
+ public string[] arrSendBuffer = new string[65534]; // MySQL send buffer
+ public bool bLetMeOut = false; // Helper to handle system tray
+
+ public DatabaseController dcConnection = new DatabaseController(); // MySQL controller
+ public TCPController tcpcServer=new TCPController(); // TCP controller
+
+ public bool bSRSStatus; // Use empty/default SRS status
+ public bool bLotATCStatus; // Use empty/default LotATC status
// ################################ Main ################################
private void form_Main_Load(object sender, EventArgs e)
{
// Form loaded - fill controls with default values
-
Globals.arrLogHistory[0] = DateTime.Now.ToString("HH:mm:ss") + " > " + "Perun started";
- form_Main_LoadSettings(); // Load settings
- this.Text = PerunHelper.GetAppVersion(this.Text + " - "); // Display build version in title bar
+ form_Main_LoadSettings(); // Load settings
+ this.Text = PerunHelper.GetAppVersion(this.Text + " - "); // Display build version in title bar
}
public form_Main()
@@ -62,7 +66,6 @@ namespace Perun_v1
Properties.Settings.Default.OTHER_SRS_FILE = con_txt_3rd_srs.Text;
Properties.Settings.Default.OTHER_LOTATC_USE = con_check_3rd_lotatc.Checked;
Properties.Settings.Default.OTHER_SRS_USE = con_check_3rd_srs.Checked;
-
Properties.Settings.Default.DCS_Server_Port = Int32.Parse(con_txt_dcs_server_port.Text);
Properties.Settings.Default.DCS_Instance = Int32.Parse(con_txt_dcs_instance.Text);
@@ -92,7 +95,6 @@ namespace Perun_v1
// Enables controls
con_Button_Listen_ON.Enabled = true;
con_Button_Listen_OFF.Enabled = false;
-
con_txt_mysql_database.Enabled = true;
con_txt_mysql_username.Enabled = true;
con_txt_mysql_password.Enabled = true;
@@ -104,28 +106,30 @@ namespace Perun_v1
con_check_3rd_srs.Enabled = true;
con_txt_dcs_server_port.Enabled = true;
con_txt_dcs_instance.Enabled = true;
-
}
// ################################ User input ################################
private void con_Button_Listen_ON_Click(object sender, EventArgs e)
{
// Start listening
- TCPController.Create(Int32.Parse(con_txt_dcs_server_port.Text), ref Globals.arrLogHistory, ref arrSendBuffer);
- TCPController.thrTCPListener = new Thread(TCPController.StartListen);
- TCPController.thrTCPListener.Start();
- TCPController.thrTCPListener.Name = "TCPThread";
+ tcpcServer.Create(Int32.Parse(con_txt_dcs_server_port.Text), ref Globals.arrLogHistory, ref arrSendBuffer);
+ tcpcServer.thrTCPListener = new Thread(tcpcServer.StartListen);
+ tcpcServer.thrTCPListener.Start();
+ tcpcServer.thrTCPListener.Name = "TCPThread";
- form_Main_DisableControls(); // Disable controlls
- form_Main_SaveSettings(); // Save settings
+ form_Main_DisableControls(); // Disable controlls
+ form_Main_SaveSettings(); // Save settings
// Prepare connection string
- dbConnection.strMySQLConnectionString = "server=" + con_txt_mysql_server.Text + ";user=" + con_txt_mysql_username.Text + ";database=" + con_txt_mysql_database.Text + ";port=" + con_txt_mysql_port.Text + ";password=" + con_txt_mysql_password.Text;
+ dcConnection.strMySQLConnectionString = "server=" + con_txt_mysql_server.Text + ";user=" + con_txt_mysql_username.Text + ";database=" + con_txt_mysql_database.Text + ";port=" + con_txt_mysql_port.Text + ";password=" + con_txt_mysql_password.Text;
// Start timmers
tim_200ms.Enabled = true;
tim_1000ms.Enabled = true;
tim_10000ms.Enabled = true;
+
+ // Send initial data
+ tim_10000ms_Tick(null, null);
}
private void con_Button_Listen_OFF_Click(object sender, EventArgs e)
@@ -133,7 +137,7 @@ namespace Perun_v1
// Stop listening
try
{
- TCPController.StopListen();
+ tcpcServer.StopListen();
}
catch (Exception ex)
{
@@ -142,6 +146,11 @@ namespace Perun_v1
form_Main_EnableControls(); // Enable controls
+ con_img_db.Image = null;
+ con_img_dcs.Image = null;
+ con_img_lotATC.Image = null;
+ con_img_srs.Image = null;
+
// Stop timmers
tim_1000ms.Enabled = false;
tim_10000ms.Enabled = false;
@@ -194,7 +203,7 @@ namespace Perun_v1
{
form_Main_SaveSettings();
- boolLetMeOut = true; // Save settings on exit
+ bLetMeOut = true; // Save settings on exit
this.Close(); // Allow to exit application
}
else if (dialogResult == DialogResult.No)
@@ -244,7 +253,7 @@ namespace Perun_v1
private void form_Main_FormClosing(object sender, FormClosingEventArgs e)
{
// Minimize to try on clicking "X"
- if (e.CloseReason == CloseReason.UserClosing && !boolLetMeOut)
+ if (e.CloseReason == CloseReason.UserClosing && !bLetMeOut)
{
e.Cancel = true;
form_Main_SendToTray(); // Send app to system tray
@@ -279,22 +288,45 @@ namespace Perun_v1
{
if (arrSendBuffer[i] != null)
{
- dbConnection.SendToMySql(arrSendBuffer[i]);
+ dcConnection.SendToMySql(arrSendBuffer[i]);
arrSendBuffer[i] = null;
}
}
- // Update icons
- if (dbConnection.bStatus)
+ // Update status icons at main form
+ if (dcConnection.bStatus)
{
con_img_db.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_db");
} else
{
con_img_db.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_error");
}
- con_img_dcs.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_game");
- con_img_srs.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_srs");
- con_img_lotATC.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_lotatc");
+ if (tcpcServer.bStatus)
+ {
+ con_img_dcs.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_game");
+ }
+ else
+ {
+ con_img_dcs.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_error");
+ }
+ if (bSRSStatus)
+ {
+ con_img_srs.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_srs");
+ }
+ else
+ {
+ con_img_srs.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_error");
+ }
+ if (bLotATCStatus)
+ {
+ con_img_lotATC.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_lotatc");
+ }
+ else
+ {
+ con_img_lotATC.Image = (Image)Properties.Resources.ResourceManager.GetObject("ico_error");
+ }
+
+
}
private void tim_10000ms_Tick(object sender, EventArgs e)
@@ -356,11 +388,12 @@ namespace Perun_v1
}
boolSRSdefault = false;
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > SRS data loaded");
-
+ bSRSStatus = true;
}
catch
{
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > SRS data ERROR");
+ bSRSStatus = false;
}
@@ -369,7 +402,7 @@ namespace Perun_v1
{
strSRSJson = "{'type':'100','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':{'ignore':'true'}}";
}
- dbConnection.SendToMySql(strSRSJson);
+ dcConnection.SendToMySql(strSRSJson);
// Handle LotATC - TBD clean code for multiinstance
if (con_check_3rd_lotatc.Checked)
@@ -382,10 +415,12 @@ namespace Perun_v1
strLotATCJson = "{'type':'101','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':'" + strLotATCJson + "'}";
boolLotATCdefault = false;
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > LotATC data loaded");
+ bLotATCStatus = true;
}
catch
{
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > LotATC data ERROR");
+ bLotATCStatus = false;
}
@@ -394,7 +429,7 @@ namespace Perun_v1
{
strLotATCJson = "{'type':'101','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':{'ignore':'true'}}"; // No LotATC controller connected
}
- dbConnection.SendToMySql(strLotATCJson);
+ dcConnection.SendToMySql(strLotATCJson);
}
}
}
diff --git a/02_Windows_App/Perun_v1/Perun_v1.csproj b/02_Windows_App/Perun_v1/Perun_v1.csproj
index 857d2d4..6824983 100644
--- a/02_Windows_App/Perun_v1/Perun_v1.csproj
+++ b/02_Windows_App/Perun_v1/Perun_v1.csproj
@@ -75,7 +75,7 @@
true
- true
+ false
false