Skip to content

Commit 03ef2c7

Browse files
committed
Fixes server endpoint and synchronization errors
1 parent 07b1839 commit 03ef2c7

File tree

6 files changed

+149
-106
lines changed

6 files changed

+149
-106
lines changed

LanPartyTool/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919

2020
[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
2121

22-
[assembly: AssemblyVersion("0.9.5.0")]
23-
[assembly: AssemblyFileVersion("0.9.5.0")]
22+
[assembly: AssemblyVersion("0.9.6.23")]
23+
[assembly: AssemblyFileVersion("0.9.6.23")]
2424

2525
[assembly: XmlConfigurator(ConfigFile = "log4net.config")]
2626
[assembly: Guid("94403695-D3D3-4A0C-A7A8-A8B9FAAF5E9B")]

LanPartyTool/agent/Agent.cs

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.IO;
33
using System.IO.Ports;
44
using System.Linq;
5-
using System.Media;
65
using System.Net.Sockets;
76
using System.Threading;
87
using System.Windows;
@@ -21,6 +20,8 @@ internal class Agent
2120
private readonly ServerSocket _serverSocket = new ServerSocket();
2221
private readonly Status _status = Status.GetInstance();
2322

23+
private readonly object SYNC = new object();
24+
2425
public Agent()
2526
{
2627
_serverSocket.OnNewStatus += NewSocketStatusHandler;
@@ -39,34 +40,42 @@ public void Stop()
3940

4041
private void StartAgent()
4142
{
42-
Logger.Info("Agent start");
43+
lock (SYNC)
44+
{
45+
Logger.Info("Agent start");
46+
47+
InitConfig();
4348

44-
InitConfig();
49+
if (!CheckConfig()) return;
4550

46-
if (!CheckConfig()) return;
51+
if (!CheckEntryPoints()) return;
4752

48-
if (!CheckEntryPoints()) return;
53+
_serverSocket.OnConnectionAccepted += NewConnectionHandler;
54+
_serverSocket.Start();
4955

50-
_serverSocket.OnConnectionAccepted += NewConnectionHandler;
51-
_serverSocket.Start();
56+
_serialPortReader.OnNewBarcode += NewBarcodeHandler;
57+
_serialPortReader.Start();
5258

53-
_serialPortReader.OnNewBarcode += NewBarcodeHandler;
54-
_serialPortReader.Start();
59+
SendWelcomeToServer();
5560

56-
Logger.Debug("Agent start sequence completed");
61+
Logger.Debug("Agent start sequence completed");
62+
}
5763
}
5864

5965
private void StopAgent()
6066
{
61-
Logger.Info("Agent stop");
67+
lock (SYNC)
68+
{
69+
Logger.Info("Agent stop");
6270

63-
_serialPortReader.OnNewBarcode -= NewBarcodeHandler;
64-
_serialPortReader.Stop();
71+
_serialPortReader.OnNewBarcode -= NewBarcodeHandler;
72+
_serialPortReader.Stop();
6573

66-
_serverSocket.OnConnectionAccepted -= NewConnectionHandler;
67-
_serverSocket.Stop();
74+
_serverSocket.OnConnectionAccepted -= NewConnectionHandler;
75+
_serverSocket.Stop();
6876

69-
Logger.Debug("Agent stop sequence completed");
77+
Logger.Debug("Agent stop sequence completed");
78+
}
7079
}
7180

7281
private void InitConfig()
@@ -293,6 +302,12 @@ public void DumpConfigHandler()
293302
Logger.Debug($"CFG lines: {cfgLines.Count}");
294303
}
295304

305+
private void SendWelcomeToServer()
306+
{
307+
Logger.Info("Send Welcome message to server");
308+
ServerUtility.Welcome(_config.ServerUrl);
309+
}
310+
296311
private void ApplyNewCfg(List<string> cfgLines)
297312
{
298313
if (cfgLines == null) return;

LanPartyTool/agent/SerialPortReader.cs

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -27,81 +27,94 @@ public enum PortStatus
2727
}
2828

2929
private static readonly ILog Logger = LogManager.GetLogger(typeof(SerialPortReader));
30+
3031
private readonly Config _config = Config.GetInstance();
3132
private readonly ServerSocket _serverSocket = new ServerSocket();
3233
private readonly Status _status = Status.GetInstance();
34+
private readonly Watchdog _tokenWatchdog = new Watchdog();
3335

3436
private readonly List<byte> line = new List<byte>();
37+
38+
private readonly object SYNC = new object();
3539
private string _lastBarcode;
3640
private DateTime _lastBarcodeDateTime = DateTime.Now;
3741

3842
private SerialPort _serialPort;
3943
private int _tokenCounts;
4044

4145
private TokenStatus _tokenStatus = TokenStatus.Waiting;
42-
private readonly Watchdog _tokenWatchdog = new Watchdog();
4346

4447
public event NewBarcodeHandler OnNewBarcode;
4548
public event NewStatusHandler OnNewStatus;
4649

4750
public void Start()
4851
{
49-
Logger.Info("SerialPortReader start");
52+
lock (SYNC)
53+
{
54+
Logger.Info("SerialPortReader start");
5055

51-
Logger.Debug("Preparing serial port");
52-
OnNewStatus?.Invoke(PortStatus.Preparing);
56+
Logger.Debug("Preparing serial port");
57+
OnNewStatus?.Invoke(PortStatus.Preparing);
5358

54-
_serialPort = new SerialPort(_config.SerialPort)
55-
{
56-
BaudRate = 9600,
57-
DataBits = 8,
58-
Parity = Parity.None,
59-
StopBits = StopBits.One,
60-
Handshake = Handshake.None,
61-
ReadTimeout = SerialPort.InfiniteTimeout
62-
};
63-
64-
Logger.Debug("Opening serial port");
65-
try
66-
{
67-
_serialPort.Open();
68-
}
69-
catch (Exception e)
70-
{
71-
Logger.Error(e.Message);
72-
OnNewStatus?.Invoke(PortStatus.Closed);
73-
return;
74-
}
59+
_serialPort = new SerialPort(_config.SerialPort)
60+
{
61+
BaudRate = 9600,
62+
DataBits = 8,
63+
Parity = Parity.None,
64+
StopBits = StopBits.One,
65+
Handshake = Handshake.None,
66+
ReadTimeout = SerialPort.InfiniteTimeout
67+
};
68+
69+
Logger.Debug("Opening serial port");
70+
try
71+
{
72+
_serialPort.Open();
73+
}
74+
catch (Exception e)
75+
{
76+
Logger.Error(e.Message);
77+
OnNewStatus?.Invoke(PortStatus.Closed);
78+
return;
79+
}
7580

76-
OnNewStatus?.Invoke(PortStatus.Open);
81+
OnNewStatus?.Invoke(PortStatus.Open);
7782

78-
_serialPort.DataReceived += ReadData;
83+
_serialPort.DataReceived += ReadData;
7984

80-
_tokenWatchdog.OnWatchdogTimeout += TokenRemoved;
85+
_tokenWatchdog.OnWatchdogTimeout += TokenRemoved;
86+
}
8187
}
8288

8389
public void Stop()
90+
8491
{
85-
Logger.Info("SerialPortReader stop");
92+
lock (SYNC)
93+
{
94+
Logger.Info("SerialPortReader stop");
8695

87-
OnNewStatus?.Invoke(PortStatus.Closing);
96+
OnNewStatus?.Invoke(PortStatus.Closing);
8897

89-
_tokenWatchdog.OnWatchdogTimeout -= TokenRemoved;
98+
_tokenWatchdog.OnWatchdogTimeout -= TokenRemoved;
9099

91-
Logger.Debug("Closing serial port");
100+
Logger.Debug("Closing serial port");
92101

93-
_serialPort.DataReceived -= ReadData;
94102

95-
if (_serialPort != null && _serialPort.IsOpen)
96-
try
97-
{
98-
_serialPort.Close();
99-
}
100-
catch (IOException)
103+
if (_serialPort != null && _serialPort.IsOpen)
101104
{
105+
_serialPort.DataReceived -= ReadData;
106+
107+
try
108+
{
109+
_serialPort.Close();
110+
}
111+
catch (IOException)
112+
{
113+
}
102114
}
103115

104-
_serialPort = null;
116+
_serialPort = null;
117+
}
105118
}
106119

107120
private void ReadData(object sender, SerialDataReceivedEventArgs e)
@@ -142,10 +155,7 @@ private void ReadDataLoop()
142155
continue;
143156

144157
var barcode = ParseString(line);
145-
if (!string.IsNullOrEmpty(barcode))
146-
{
147-
new Thread(() => { NewSerialLine(barcode); }).Start();
148-
}
158+
if (!string.IsNullOrEmpty(barcode)) new Thread(() => { NewSerialLine(barcode); }).Start();
149159

150160
line.Clear();
151161
}

LanPartyTool/agent/ServerSocket.cs

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public enum Status
2626

2727
private static readonly ILog Logger = LogManager.GetLogger(typeof(ServerSocket));
2828

29+
private readonly object SYNC = new object();
30+
2931
private Socket _socket;
3032
private Thread _thread;
3133

@@ -34,61 +36,67 @@ public enum Status
3436

3537
public void Start()
3638
{
37-
Logger.Info("ServerSocket start");
39+
lock (SYNC)
40+
{
41+
Logger.Info("ServerSocket start");
3842

39-
Logger.Debug("Preparing socket");
40-
OnNewStatus?.Invoke(Status.Preparing);
43+
Logger.Debug("Preparing socket");
44+
OnNewStatus?.Invoke(Status.Preparing);
4145

42-
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
43-
_socket.Bind(new IPEndPoint(IPAddress.Any, SocketPort));
46+
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
47+
_socket.Bind(new IPEndPoint(IPAddress.Any, SocketPort));
4448

45-
try
46-
{
47-
Logger.Debug("Socket Listen");
48-
_socket.Listen(SocketBacklog);
49-
}
50-
catch (SocketException e)
51-
{
52-
Logger.Error(e.Message);
53-
return;
54-
}
49+
try
50+
{
51+
Logger.Debug("Socket Listen");
52+
_socket.Listen(SocketBacklog);
53+
}
54+
catch (SocketException e)
55+
{
56+
Logger.Error(e.Message);
57+
return;
58+
}
5559

56-
OnNewStatus?.Invoke(Status.Listening);
60+
OnNewStatus?.Invoke(Status.Listening);
5761

58-
Logger.Debug("Preparing main loop thread");
59-
_thread = new Thread(Loop);
60-
_thread.Start();
62+
Logger.Debug("Preparing main loop thread");
63+
_thread = new Thread(Loop);
64+
_thread.Start();
65+
}
6166
}
6267

6368
public void Stop()
6469
{
65-
Logger.Info("ServerSocket stop");
70+
lock (SYNC)
71+
{
72+
Logger.Info("ServerSocket stop");
6673

67-
OnNewStatus?.Invoke(Status.Closing);
74+
OnNewStatus?.Invoke(Status.Closing);
6875

69-
if (_socket != null && _socket.IsBound)
70-
try
71-
{
72-
_socket.Close();
73-
}
74-
catch (SocketException)
75-
{
76-
}
76+
if (_socket != null)
77+
try
78+
{
79+
_socket.Close();
80+
}
81+
catch (SocketException)
82+
{
83+
}
7784

78-
if (_thread != null)
79-
{
80-
if (_thread.IsAlive)
85+
if (_thread != null)
8186
{
82-
_thread.Interrupt();
83-
_thread.Join();
84-
}
87+
if (_thread.IsAlive)
88+
{
89+
_thread.Interrupt();
90+
_thread.Join();
91+
}
8592

86-
_thread = null;
87-
}
93+
_thread = null;
94+
}
8895

89-
_socket = null;
96+
_socket = null;
9097

91-
OnNewStatus?.Invoke(Status.Closed);
98+
OnNewStatus?.Invoke(Status.Closed);
99+
}
92100
}
93101

94102
private void Loop()

LanPartyTool/utility/HttpUtility.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
22
using System.Net.Http;
3-
using log4net;
43
using LanPartyTool.agent;
4+
using log4net;
55
using Newtonsoft.Json;
66
using RestSharp;
77

@@ -30,7 +30,7 @@ public static JsonResponse DoPost(string url, dynamic requestBody = null)
3030
request.AddHeader("content-type", "application/json");
3131
request.AddHeader("accept", "application/json");
3232

33-
var client = new RestClient(url) {Timeout = HTTP_CLIENT_TIMEOUT };
33+
var client = new RestClient(url) {Timeout = HTTP_CLIENT_TIMEOUT};
3434
var response = client.Execute(request);
3535
if (!response.IsSuccessful)
3636
{

0 commit comments

Comments
 (0)