Last active
August 29, 2015 14:25
-
-
Save melvinlee/bcfd575afec6b008a154 to your computer and use it in GitHub Desktop.
Using TCP/IP connection to receive data from other party
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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