/// <summary> /// Ensures the response is of a certain type, just in case something goes haywire on the wire /// </summary> private static void RequireResponseType(ResponseWrapper response, ResponseWrapper.MessageOneofCase type) { if (response.MessageCase != type) { throw new ResponseException($"Invalid response type, expected {type}, got {response.MessageCase}"); } }
/// <summary> /// Utility method for executing a request and awaiting the response /// </summary> /// <param name="wrapper">The request to execute</param> /// <param name="requiredResponseType"> /// The expected response type. If the response is not of this type, /// an exception will be thrown. /// </param> /// <returns>The valid response</returns> private async Task <ResponseWrapper> ExecuteRequest(RequestWrapper wrapper, ResponseWrapper.MessageOneofCase requiredResponseType) { var connection = _pool.Get(); var refId = await SendMessage(wrapper, connection); // Wait for a response var responseWrapper = await WaitForResponse(refId, connection); // Make sure the response is valid HandlePossibleError(responseWrapper); RequireResponseType(responseWrapper, requiredResponseType); return(responseWrapper); }