public static async Task <Tuple <bool, Int32> > DeserializeAsync(IReadableStreamAsync stream, Int32 defaultVal) { var bytes = new byte[sizeof(Int32)]; bool stillConnected = await stream.ReadAllAsync(bytes, 0, bytes.Length); if (!stillConnected) { return(new Tuple <bool, Int32>(false, defaultVal)); } Int32 iNetworkOrder = BitConverter.ToInt32(bytes, 0); Int32 i = IPAddress.NetworkToHostOrder(iNetworkOrder); return(new Tuple <bool, Int32>(true, i)); }
public static async Task <Tuple <bool, string> > DeserializeAsync(IReadableStreamAsync stream, string defaultVal) { // first read length of string var res = await DeserializeAsync(stream, 0); bool stillConnected = res.Item1; int length = res.Item2; if (!stillConnected) { return(new Tuple <bool, string>(false, defaultVal)); } // length check if (length < 0 || length > MAX_STRING_LEN) { // if other end sends bad length, we can't currently handle it DEV: improve return(new Tuple <bool, string>(false, defaultVal)); } var bytes = new byte[length]; stillConnected = await stream.ReadAllAsync(bytes, 0, bytes.Length); if (!stillConnected) { return(new Tuple <bool, string>(false, defaultVal)); } try { string s = m_asciiEncoder.GetString(bytes); return(new Tuple <bool, string>(true, s)); } catch { // if other end sends bad info, we can't currently handle it DEV: improve return(new Tuple <bool, string>(false, defaultVal)); } }