@@ -35,10 +35,88 @@ public static void Translate(
3535 ToolStripStatusLabel statusLabelControl ,
3636 TextBox resultTextBoxControl )
3737 {
38- // Step: prepare request: models and http client
39- RequestData request = currentTranslateService . ServiceTranslateRequest (
40- originalText , langFrom , langTo ) ;
38+ String baseAddress = currentTranslateService . GetServiceHost ( originalText , langFrom , langTo ) ;
39+
40+ #region Prepare request
41+
42+ // Prepare request
43+ if ( currentTranslateService . ServiceTranslateBootstrapRequest ( originalText , langFrom , langTo , out RequestData ? prepareTranslateRequest ) )
44+ {
45+ HttpResponseMessage prepareTranslateResponse = ServiceRequest ( prepareTranslateRequest , baseAddress , statusLabelControl ) ;
46+
47+ if ( prepareTranslateResponse . StatusCode != HttpStatusCode . OK )
48+ {
49+ statusLabelControl . Text = "[ERR] Запрос вернулся с ошибкой: " + prepareTranslateResponse . StatusCode + $ "[{ ( int ) prepareTranslateResponse . StatusCode } ]";
50+ // resultTextBoxControl.Text = prepareTranslateResponse.Content.ReadAsStringAsync().Result;
51+
52+ prepareTranslateResponse . Dispose ( ) ;
53+ return ;
54+ }
55+
56+ // Step: response parsing
57+ statusLabelControl . Text = "Prepare..." ;
58+ resultTextBoxControl . Text = String . Empty ;
59+
60+ if ( ! currentTranslateService . ServiceTranslateBootstrapResponse ( prepareTranslateResponse , langFrom , langTo ) )
61+ {
62+ statusLabelControl . Text = "[ERR] Запрос вернулся с ошибкой: " + prepareTranslateResponse . StatusCode + $ "[{ ( int ) prepareTranslateResponse . StatusCode } ]";
63+ // resultTextBoxControl.Text = prepareTranslateResponse.Content.ReadAsStringAsync().Result;
64+
65+ prepareTranslateResponse . Dispose ( ) ;
66+ return ;
67+ }
68+
69+ prepareTranslateResponse . Dispose ( ) ;
70+
71+ // Step: output result
72+ statusLabelControl . Text = String . Empty ;
73+ //resultTextBoxControl.Text = prepareResponseData.Text;
74+ }
75+
76+ #endregion
77+
78+ #region Translate request
79+
80+ // Get request model
81+ RequestData translateRequest = currentTranslateService . ServiceTranslateRequest ( originalText , langFrom , langTo ) ;
82+ HttpResponseMessage translateResponse = ServiceRequest ( translateRequest , baseAddress , statusLabelControl ) ;
83+ if ( translateResponse . StatusCode != HttpStatusCode . OK )
84+ {
85+ statusLabelControl . Text = "[ERR] Запрос вернулся с ошибкой: " + translateResponse . StatusCode + $ "[{ ( int ) translateResponse . StatusCode } ]";
86+ resultTextBoxControl . Text = translateResponse . Content . ReadAsStringAsync ( ) . Result ;
87+
88+ translateResponse . Dispose ( ) ;
89+ return ;
90+ }
91+
92+ // Step: response parsing
93+ statusLabelControl . Text = "Parsing..." ;
94+ resultTextBoxControl . Text = String . Empty ;
4195
96+ ResponseData translateResponseData = currentTranslateService . ServiceTranslateResponse ( translateResponse , langFrom , langTo ) ;
97+ translateResponse . Dispose ( ) ;
98+
99+ // Step: output result
100+ resultTextBoxControl . Text = translateResponseData . Text ;
101+ statusLabelControl . Text = String . Empty ;
102+
103+ #endregion
104+ }
105+
106+ /// <summary>
107+ /// Выполнить перевод с указанными настройками
108+ /// </summary>
109+ /// <param name="request">Модель запроса</param>
110+ /// <param name="baseAddress">Базовый адрес сервиса</param>
111+ /// <param name="statusLabelControl">Контрол вывода служебных сообщений</param>
112+ /// <exception cref="UnreachableException">Неизвестный тип запроса</exception>
113+ /// <exception cref="ArgumentException">Не заполнено тело HttpPost запроса</exception>
114+ private static HttpResponseMessage ServiceRequest (
115+ RequestData request ,
116+ String baseAddress ,
117+ ToolStripStatusLabel statusLabelControl )
118+ {
119+ // Step: prepare request: models and http client
42120 SocketsHttpHandler handler = new SocketsHttpHandler ( )
43121 {
44122 AutomaticDecompression = DecompressionMethods . GZip | DecompressionMethods . Deflate
@@ -52,7 +130,7 @@ public static void Translate(
52130 HttpClient httpClient = new HttpClient ( handler )
53131 {
54132 Timeout = TimeSpan . FromSeconds ( MyConstants . TimeoutSeconds ) ,
55- BaseAddress = new Uri ( currentTranslateService . GetServiceHost ( originalText , langFrom , langTo ) ) ,
133+ BaseAddress = new Uri ( baseAddress ) ,
56134 } ;
57135
58136 foreach ( KeyValuePair < string , string > item in request . Headers )
@@ -66,8 +144,8 @@ public static void Translate(
66144 httpClient . DefaultRequestHeaders . Add ( item . Key , item . Value ) ;
67145 }
68146
69- // Step: translate request by API
70- statusLabelControl . Text = "Translating ..." ;
147+ // Step: request by API
148+ statusLabelControl . Text = "Request ..." ;
71149
72150 HttpResponseMessage ? response ;
73151
@@ -93,26 +171,7 @@ public static void Translate(
93171 handler . Dispose ( ) ;
94172 httpClient . Dispose ( ) ;
95173
96- // Error request validation
97- if ( response . StatusCode != HttpStatusCode . OK )
98- {
99- statusLabelControl . Text = "[ERR] Запрос вернулся с ошибкой: " + response . StatusCode + $ "[{ ( int ) response . StatusCode } ]";
100- resultTextBoxControl . Text = response . Content . ReadAsStringAsync ( ) . Result ;
101-
102- response . Dispose ( ) ;
103- return ;
104- }
105-
106- // Step: response parsing
107- statusLabelControl . Text = "Parsing..." ;
108- resultTextBoxControl . Text = String . Empty ;
109-
110- ResponseData responseData = currentTranslateService . ServiceTranslateResponse ( response , langFrom , langTo ) ;
111- response . Dispose ( ) ;
112-
113- // Step: output result
114- resultTextBoxControl . Text = responseData . Text ;
115- statusLabelControl . Text = String . Empty ;
174+ return response ;
116175 }
117176 }
118177}
0 commit comments