private async Task Handshake(CancellationToken cancel_token)
{
using (var reader=await RecvAsync(1, cancel_token)) {
var c0 = reader.ReadByte();
if (c0!=3) {
throw new InvalidDataException();
}
}
await SendAsync(new byte[] { 0x03 }, cancel_token);
using (var c1reader=await RecvAsync(1536, cancel_token)) {
var c1time = c1reader.ReadInt32();
var c1ver = c1reader.ReadInt32();
if (c1ver==0) {
c1reader.BaseStream.Seek(0, SeekOrigin.Begin);
await HandshakeOld(c1reader, cancel_token);
}
else {
c1reader.BaseStream.Seek(0, SeekOrigin.Begin);
await HandshakeNew(c1reader, cancel_token);
}
}
timestampTimer.Reset();
timestampTimer.Start();
logger.Debug("Handshake completed");
}