Switched to TCP

This commit is contained in:
szporowolik
2019-09-12 17:48:41 +02:00
parent 52ecfda6c5
commit df7155f061
2 changed files with 65 additions and 56 deletions

View File

@@ -41,62 +41,65 @@ internal class TCPController
public static void StartListen() public static void StartListen()
{ {
Console.WriteLine("UDP Listen start"); Console.WriteLine("TCP Listen start");
try while (!TCPController.boolDone)
{ {
// Start listening to UDP try
tcpServer = new TcpListener(IPAddress.Any, intListenPort);
string strReceivedData;
byte[] arrReceiveByteArray;
// Start the main loop
TCPController.boolDone = false;
tcpServer.Start();
while (!TCPController.boolDone)
{ {
// Start listening // Start listening to UDP
Console.WriteLine("TCP: Waiting for packet"); tcpServer = new TcpListener(IPAddress.Any, intListenPort);
TcpClient tcpClient = tcpServer.AcceptTcpClient(); //if a connection exists, the server will accept it
NetworkStream ns = tcpClient.GetStream(); //networkstream is used to send/receive messages
while (tcpClient.Connected && !TCPController.boolDone) //while the client is connected, we look for incoming messages string strReceivedData;
byte[] arrReceiveByteArray;
// Start the main loop
TCPController.boolDone = false;
tcpServer.Start();
while (!TCPController.boolDone)
{ {
arrReceiveByteArray = new byte[1024]; //the messages arrive as byte array // Start listening
ns.Read(arrReceiveByteArray, 0, arrReceiveByteArray.Length); //the same networkstream reads the message sent by the client
strReceivedData = Encoding.ASCII.GetString(arrReceiveByteArray, 0, arrReceiveByteArray.Length);
Console.WriteLine("Sender: {0} Payload: {1}", null , strReceivedData);
dynamic dynamicRawTCPFrame = JsonConvert.DeserializeObject(strReceivedData); // Deserialize received frame Console.WriteLine("TCP: Waiting for packet");
string strRawTCPFrameType = dynamicRawTCPFrame.type; TcpClient tcpClient = tcpServer.AcceptTcpClient(); //if a connection exists, the server will accept it
NetworkStream ns = tcpClient.GetStream(); //networkstream is used to send/receive messages
PerunHelper.LogHistoryAdd(ref arrLogHistory, "TCP packet received, type: " + strRawTCPFrameType); while (tcpClient.Connected && !TCPController.boolDone) //while the client is connected, we look for incoming messages
// Add to mySQL send buffer (find first empty slot)
for (int i = 0; i < arrSendBuffer.Length - 1; i++)
{ {
if (arrSendBuffer[i] == null) arrReceiveByteArray = new byte[1024]; //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);
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++)
{ {
arrSendBuffer[i] = strReceivedData; if (arrSendBuffer[i] == null)
break; {
arrSendBuffer[i] = strReceivedData;
break;
}
} }
} }
}
}
tcpServer.Stop();
} }
tcpServer.Stop(); catch (Exception e)
}
catch (Exception e)
{
// General exception found
if (e.HResult != -2147467259)
{ {
Console.WriteLine(e.ToString()); // General exception found
PerunHelper.LogHistoryAdd(ref arrLogHistory, "ERROR UDP - port may be in use"); if (e.HResult != -2147467259)
{
Console.WriteLine(e.ToString());
PerunHelper.LogHistoryAdd(ref arrLogHistory, "ERROR TCP - port may be in use");
}
} }
//Console.WriteLine("TCP listen stop");
} }
Console.WriteLine("TCP listen stop");
} }
} }

View File

@@ -109,10 +109,15 @@ namespace Perun_v1
private void con_Button_Listen_ON_Click(object sender, EventArgs e) private void con_Button_Listen_ON_Click(object sender, EventArgs e)
{ {
// Start listening // Start listening
UDPController.Create(48620, ref Globals.arrLogHistory, ref arrSendBuffer); //UDPController.Create(48620, ref Globals.arrLogHistory, ref arrSendBuffer);
UDPController.thrUDPListener = new Thread(UDPController.StartListen); //UDPController.thrUDPListener = new Thread(UDPController.StartListen);
UDPController.thrUDPListener.Start(); //UDPController.thrUDPListener.Start();
UDPController.thrUDPListener.Name = "UDPThread"; //UDPController.thrUDPListener.Name = "UDPThread";
TCPController.Create(48620, ref Globals.arrLogHistory, ref arrSendBuffer);
TCPController.thrTCPListener = new Thread(TCPController.StartListen);
TCPController.thrTCPListener.Start();
TCPController.thrTCPListener.Name = "TCPThread";
form_Main_DisableControls(); // Disable controlls form_Main_DisableControls(); // Disable controlls
form_Main_SaveSettings(); // Save settings form_Main_SaveSettings(); // Save settings
@@ -131,7 +136,8 @@ namespace Perun_v1
// Stop listening // Stop listening
try try
{ {
UDPController.StopListen(); //UDPController.StopListen();
TCPController.StopListen();
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -334,26 +340,26 @@ namespace Perun_v1
if (raw_lotatc.Count > 0) if (raw_lotatc.Count > 0)
{ {
strSRSJson = JsonConvert.SerializeObject(raw_lotatc); strSRSJson = JsonConvert.SerializeObject(raw_lotatc);
strSRSJson = "{'type':'100','instance':'1','payload':'" + strSRSJson + "'}"; strSRSJson = "{'type':'100','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':'" + strSRSJson + "'}";
} }
else else
{ {
strSRSJson = "{'type':'100','instance':'1','payload':{'ignore':'false'}}"; // No SRS clients connected strSRSJson = "{'type':'100','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':{'ignore':'false'}}"; // No SRS clients connected
} }
boolSRSdefault = false; boolSRSdefault = false;
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#1 > SRS data loaded"); PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > SRS data loaded");
} }
catch catch
{ {
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#1 > SRS data ERROR"); PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > SRS data ERROR");
} }
} }
if (boolSRSdefault) if (boolSRSdefault)
{ {
strSRSJson = "{'type':'100','instance':'1','payload':{'ignore':'true'}}"; strSRSJson = "{'type':'100','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':{'ignore':'true'}}";
} }
DatabaseController.SendToMySql(strSRSJson); DatabaseController.SendToMySql(strSRSJson);
@@ -365,20 +371,20 @@ namespace Perun_v1
strLotATCJson = System.IO.File.ReadAllText(con_txt_3rd_lotatc.Text); strLotATCJson = System.IO.File.ReadAllText(con_txt_3rd_lotatc.Text);
dynamic raw_srs = JsonConvert.DeserializeObject(strLotATCJson); dynamic raw_srs = JsonConvert.DeserializeObject(strLotATCJson);
strLotATCJson = "{'type':'101','instance':'1','payload':'" + strLotATCJson + "'}"; strLotATCJson = "{'type':'101','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':'" + strLotATCJson + "'}";
boolLotATCdefault = false; boolLotATCdefault = false;
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#1 > LotATC data loaded"); PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > LotATC data loaded");
} }
catch catch
{ {
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#1 > LotATC data ERROR"); PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > LotATC data ERROR");
} }
} }
if (boolLotATCdefault) if (boolLotATCdefault)
{ {
strLotATCJson = "{'type':'101','instance':'1','payload':{'ignore':'true'}}"; // No LotATC controller connected strLotATCJson = "{'type':'101','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':{'ignore':'true'}}"; // No LotATC controller connected
} }
DatabaseController.SendToMySql(strLotATCJson); DatabaseController.SendToMySql(strLotATCJson);
} }