private static IEnumerable<ulong> HandleRequests(ThreadManager TM, TcpClient client) { var currentThread = TM.CurrentThread; using (var stream = client.GetStream()) { var bytes = new byte[256]; var builder = new StringBuilder(); int bytesRead; var encoder = new ASCIIEncoding(); while (true) { yield return TM.WaitForStream(currentThread, stream, bytes, 256); try { bytesRead = TM.GetResult<int>(); } catch { break; } if (bytesRead == 0) break; string requestStr = encoder.GetString(bytes, 0, bytesRead); ClientRequest request = null; bool deserializeException = false; try { request = requestStr.Deserialize<ClientRequest>(); } catch (Exception ex) { var a = ex; deserializeException = true; } JsonObject response; if (!deserializeException) { if (requestMethods.ContainsKey(request.Request)) { yield return TM.Await(currentThread, requestMethods[request.Request](TM, request)); try { response = TM.GetResult<JsonObject>(); } catch (Exception ex) { response = new ErrorResponse("An exception occurred: {0}, Stack: {1}", ex.Message, ex.StackTrace); } } else { response = new ErrorResponse("Unknown request type: \"{0}\"", request.Request); } } else { response = new ErrorResponse("Could not parse JSON object"); } byte[] responseBytes = encoder.GetBytes(response.Serialize()); stream.Write(responseBytes, 0, responseBytes.Length); } } client.Close(); }