void OnDoWork(object sender, DoWorkEventArgs e)
{
while (_messages.Count > 0)
{
TcpClient client = new TcpClient();
try
{
client.Connect(IPAddress.Parse(_activeHost.IP), _activeHost.Port);
string message = _messages.Dequeue();
byte[] buffer = Encoding.Unicode.GetBytes(message);
client.Client.Send(buffer);
Log(new MessageEventArgs(message, _messages.Count, MessageStatus.Success, null));
}
catch (SocketException ex)
{
_hasFailures = true;
string[] messages = _messages.ToArray();
Log(new MessageEventArgs(null, _messages.Count, MessageStatus.Failure, ex.Message));
_messages.Clear();
StringBuilder allMessages = new StringBuilder();
foreach (string message in messages)
{
allMessages.Append(message + Environment.NewLine);
}
File.AppendAllText(_filepath, allMessages.ToString(), Encoding.UTF8);
_activeHost = FindHost();
}
finally
{
if (client.Connected)
{
client.Client.Shutdown(SocketShutdown.Both);
client.Client.Disconnect(false);
}
}
}
_backgroundWorker = null;
}