Refactor to use the new library structure convention.
This commit is contained in:
124
library/http_handler.e
Normal file
124
library/http_handler.e
Normal file
@@ -0,0 +1,124 @@
|
||||
note
|
||||
description: "Summary description for {HTTP_CONNECTION_HANDLER}."
|
||||
author: ""
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
deferred class
|
||||
HTTP_HANDLER
|
||||
|
||||
inherit
|
||||
THREAD
|
||||
|
||||
HTTP_CONSTANTS
|
||||
|
||||
feature {NONE} -- Initialization
|
||||
|
||||
make (a_main_server: like main_server; a_name: STRING)
|
||||
-- Creates a {HTTP_HANDLER}, assigns the main_server and initialize various values
|
||||
--
|
||||
-- `a_main_server': The main server object
|
||||
-- `a_name': The name of this module
|
||||
require
|
||||
a_main_server_attached: a_main_server /= Void
|
||||
a_name_attached: a_name /= Void
|
||||
do
|
||||
main_server := a_main_server
|
||||
is_stop_requested := False
|
||||
ensure
|
||||
main_server_set: a_main_server ~ main_server
|
||||
end
|
||||
|
||||
feature -- Inherited Features
|
||||
|
||||
execute
|
||||
-- <Precursor>
|
||||
-- Creates a socket and connects to the http server.
|
||||
local
|
||||
l_http_socket: detachable TCP_STREAM_SOCKET
|
||||
l_http_port: INTEGER
|
||||
do
|
||||
is_stop_requested := False
|
||||
l_http_port := main_server_configuration.http_server_port
|
||||
create l_http_socket.make_server_by_port (l_http_port)
|
||||
if not l_http_socket.is_bound then
|
||||
print ("Socket could not be bound on port " + l_http_port.out )
|
||||
else
|
||||
from
|
||||
l_http_socket.listen (main_server_configuration.max_tcp_clients)
|
||||
print ("%NHTTP Connection Server ready on port " + l_http_port.out +"%N")
|
||||
until
|
||||
is_stop_requested
|
||||
loop
|
||||
l_http_socket.accept
|
||||
if not is_stop_requested then
|
||||
if attached l_http_socket.accepted as l_thread_http_socket then
|
||||
receive_message_and_send_reply (l_thread_http_socket)
|
||||
l_thread_http_socket.cleanup
|
||||
check
|
||||
socket_closed: l_thread_http_socket.is_closed
|
||||
end
|
||||
end
|
||||
end
|
||||
is_stop_requested := main_server.stop_requested
|
||||
end
|
||||
l_http_socket.cleanup
|
||||
check
|
||||
socket_is_closed: l_http_socket.is_closed
|
||||
end
|
||||
end
|
||||
print ("HTTP Connection Server ends.")
|
||||
rescue
|
||||
print ("HTTP Connection Server shutdown due to exception. Please relaunch manually.")
|
||||
|
||||
if attached l_http_socket as ll_http_socket then
|
||||
ll_http_socket.cleanup
|
||||
check
|
||||
socket_is_closed: ll_http_socket.is_closed
|
||||
end
|
||||
end
|
||||
is_stop_requested := True
|
||||
retry
|
||||
end
|
||||
|
||||
feature -- Access
|
||||
|
||||
is_stop_requested: BOOLEAN
|
||||
-- Set true to stop accept loop
|
||||
|
||||
feature {NONE} -- Access
|
||||
|
||||
main_server: HTTP_SERVER
|
||||
-- The main server object
|
||||
|
||||
main_server_configuration: HTTP_SERVER_CONFIGURATION
|
||||
-- The main server's configuration
|
||||
do
|
||||
Result := main_server.configuration
|
||||
end
|
||||
|
||||
Max_fragments: INTEGER = 1000
|
||||
-- Defines the maximum number of fragments that can be received
|
||||
|
||||
feature -- Status setting
|
||||
|
||||
shutdown
|
||||
-- Stops the thread
|
||||
do
|
||||
is_stop_requested := True
|
||||
end
|
||||
|
||||
feature -- Execution
|
||||
|
||||
receive_message_and_send_reply (client_socket: TCP_STREAM_SOCKET)
|
||||
require
|
||||
socket_attached: client_socket /= Void
|
||||
-- socket_valid: client_socket.is_open_read and then client_socket.is_open_write
|
||||
a_http_socket:client_socket /= Void and then not client_socket.is_closed
|
||||
deferred
|
||||
end
|
||||
|
||||
invariant
|
||||
main_server_attached: main_server /= Void
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user