1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # Example for the `app::http_request` main service `AsyncHttpRequest`
16 module http_request_example
19 import app
::http_request
21 # Simple asynchronous HTTP request to http://example.com/ displaying feedback to the window
23 super AsyncHttpRequest
25 # Back reference to the window to show feedback to the user
26 var win
: HttpRequestClientWindow
31 redef fun uri
do return "http://example.com/"
32 redef fun deserialize_json
do return false
39 win
.label_response
.text
= "Sending request..."
41 # Disable button to prevent double requests
42 win
.button_request
.enabled
= false
45 redef fun on_load
(data
, status
)
46 do win
.label_response
.text
= "Received response code {status} with {data.as(Text).byte_length} bytes"
48 redef fun on_fail
(error
)
49 do win
.label_response
.text
= "Connection error: {error}"
51 redef fun after
do win
.button_request
.enabled
= true
54 # Simpe window with a label and a button
55 class HttpRequestClientWindow
59 var layout
= new VerticalLayout(parent
=self)
61 # Button to send request
62 var button_request
= new Button(parent
=layout
, text
="Press to send HTTP request")
64 # Label displaying feedback to user
65 var label_response
= new Label(parent
=layout
, text
="No response yet.")
67 init do button_request
.observers
.add
self
69 redef fun on_event
(event
)
71 if event
isa ButtonPressEvent and event
.sender
== button_request
then
72 # Prepare and send request
73 var request
= new MyHttpRequest(self)
82 # Create the main window
83 push_window
new HttpRequestClientWindow