Skip to content

Instantly share code, notes, and snippets.

@melvinlee
Last active August 29, 2015 14:25
Show Gist options
  • Save melvinlee/bcfd575afec6b008a154 to your computer and use it in GitHub Desktop.
Save melvinlee/bcfd575afec6b008a154 to your computer and use it in GitHub Desktop.
Using TCP/IP connection to receive data from other party
public async override void Run()
{
if (string.IsNullOrEmpty(_socketObserver.Server) || (_socketObserver.Port == 0))
{
Logging("Socket NOT ready. Server address or port is not set.");
return;
}
_cts = new CancellationTokenSource();
for (; ; )
{
try
{
await Task.Delay(2000);
using (var tcpClient = new TcpClient())
{
if (_cts.IsCancellationRequested)
{
tcpClient.Close();
return;
}
Logging("Attempting connection to server " + _socketObserver.Server + " on port:" + _socketObserver.Port);
var connectTask = tcpClient.ConnectAsync(_socketObserver.Server, _socketObserver.Port);
var timeoutTask = Task.Delay(100);
if (await Task.WhenAny(connectTask, timeoutTask) == timeoutTask)
{
throw new TimeoutException();
}
Logging("Connected to server " + _socketObserver.Server);
using (var networkStream = tcpClient.GetStream())
using (var reader = new StreamReader(networkStream))
{
try
{
for (; ; )
{
var response = await reader.ReadLineAsync();
if (response == null) { break; }
//Remove EOT char
const char eot = (char) 4;
const char etx = (char) 3;
response = response.Replace(etx.ToString(CultureInfo.InvariantCulture), "");
response = response.Replace(eot.ToString(CultureInfo.InvariantCulture), "");
response = response.TrimEnd(NewLineChars);
Logging("Received: " + response);
OnDataArrive(response);
}
Logging("Server disconnected");
}
catch (IOException)
{
Logging("Server disconnected");
}
}
}
}
catch (TimeoutException)
{
// reconnect
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment