public async Task Initialize(string host, string port, ConnectionChannel connectionChannel, HeartbeatChannel heartbeatChannel, Action<Stream, bool> packetReader)
{
if (_client == null) _client = new TcpSocketClient();
await _client.ConnectAsync(host, int.Parse(port), true, default(CancellationToken), true);
connectionChannel.OpenConnection();
heartbeatChannel.StartHeartbeat();
await Task.Run(() =>
{
while (true)
{
var sizeBuffer = new byte[4];
byte[] messageBuffer = { };
// First message should contain the size of message
_client.ReadStream.Read(sizeBuffer, 0, sizeBuffer.Length);
// The message is little-endian (that is, little end first),
// reverse the byte array.
Array.Reverse(sizeBuffer);
//Retrieve the size of message
var messageSize = BitConverter.ToInt32(sizeBuffer, 0);
messageBuffer = new byte[messageSize];
_client.ReadStream.Read(messageBuffer, 0, messageBuffer.Length);
var answer = new MemoryStream(messageBuffer.Length);
answer.Write(messageBuffer, 0, messageBuffer.Length);
answer.Position = 0;
packetReader(answer, true);
}
});
}