Created
January 2, 2015 11:38
-
-
Save arturaz/72c67e4b20f298b3ebea to your computer and use it in GitHub Desktop.
This file contains hidden or 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
private void readFrame( | |
byte[] buffer, int frameLength, int leftToRead, Ref<bool> continueReading, | |
Act<Try<Messages.Messages.FromServer>> callback | |
) { | |
Log.debug(string.Format( | |
"Entering #readFrame(frameLength={0}, leftToRead={1})", frameLength, leftToRead | |
)); | |
var stream = tcp.GetStream(); | |
stream.BeginRead(buffer, frameLength - leftToRead, leftToRead, ar => { | |
var bytesRead = stream.EndRead(ar); | |
if (bytesRead == leftToRead) { | |
Log.debug(string.Format("Read frame of size {0}", frameLength)); | |
Log.trace(string.Format("Buf: {0}", BitConverter.ToString(buffer))); | |
try { | |
var parsed = Messages.Messages.FromServer.ParseFrom(buffer); | |
ASync.OnMainThread(() => callback(F.scs(parsed))); | |
} | |
catch (Exception e) { | |
Log.error(e); | |
Log.error(string.Format( | |
"While parsing frame of size {0}: {1}", frameLength, BitConverter.ToString(buffer) | |
)); | |
} | |
getFrameSize(continueReading, callback); | |
} | |
else { | |
var newLeftToRead = leftToRead - bytesRead; | |
Log.debug(string.Format( | |
"Tried to read {0} bytes for frame of {1} bytes, read {2}, left {3}", | |
leftToRead, frameLength, bytesRead, newLeftToRead | |
)); | |
readFrame(buffer, frameLength, newLeftToRead, continueReading, callback); | |
} | |
}, null); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment