Files
EWF/library/server/wsf/session/wsf_fs_session_manager.e
Jocelyn Fiat 291bb3a33b moved wsf_extension inside wsf/extension as wsf/wsf_extension.ecf
added wsf/session as wsf/wsf_session.ecf
In descendants of WSF_HANDLER , we can keep the result of new_mapping as WSF_ROUTER_MAPPING
2012-09-28 14:42:31 +02:00

161 lines
3.0 KiB
Plaintext

note
description: "Summary description for {WSF_FS_SESSION_MANAGER}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
WSF_FS_SESSION_MANAGER
inherit
WSF_SESSION_MANAGER
create
make,
make_with_folder
feature {NONE} -- Initialization
make
do
make_with_folder ("_WSF_SESSIONS_")
end
make_with_folder (a_folder: like sessions_folder_name)
do
sessions_folder_name := a_folder
end
sessions_folder_name: STRING_8
feature -- Access
session_exists (a_session_uuid: like {WSF_SESSION}.uuid): BOOLEAN
local
f: RAW_FILE
do
create f.make (file_name (a_session_uuid))
Result := f.exists and then f.is_readable
end
session_data (a_session_uuid: like {WSF_SESSION}.uuid): detachable like {WSF_SESSION}.data
local
f: RAW_FILE
do
create f.make (file_name (a_session_uuid))
if f.exists and then f.is_readable then
f.open_read
if attached data_from_file (f) as d then
Result := d
end
f.close
end
rescue
debug
print ("Error occurred in " + generator)
end
end
feature -- Persistence
save_session (a_session: WSF_SESSION)
local
f: RAW_FILE
rescued: BOOLEAN
do
if not rescued then
if a_session.is_destroyed then
delete_session (a_session)
else
ensure_session_folder_exists
create f.make (file_name (a_session.uuid))
if not f.exists or else f.is_writable then
f.create_read_write
a_session.data.set_expiration (a_session.expiration)
f.general_store (a_session.data)
f.close
end
end
end
rescue
debug
io.error.put_string (generator + ": trouble saving session")
end
rescued := True
retry
end
delete_session (a_session: WSF_SESSION)
local
f: RAW_FILE
rescued: BOOLEAN
do
if not rescued then
create f.make (file_name (a_session.uuid))
if f.exists then
f.delete
end
end
rescue
debug
io.error.put_string (generator + ": trouble deleting session")
end
rescued := True
retry
end
feature {NONE} -- Implementation
data_from_file (f: FILE): detachable like session_data
require
f.is_open_read and f.is_readable
local
rescued: BOOLEAN
do
if
not rescued and then
attached {like session_data} f.retrieved as d
then
Result := d
end
rescue
debug
--FIXME
io.error.put_string (generator + ": incompatible session content")
end
rescued := True
retry
end
ensure_session_folder_exists
local
d: DIRECTORY
once
create d.make (sessions_folder_name)
if not d.exists then
d.recursive_create_dir
end
ensure
sessions_folder_exists_and_writable: sessions_folder_exists_and_writable
end
sessions_folder_exists_and_writable: BOOLEAN
local
d: DIRECTORY
do
create d.make (sessions_folder_name)
Result := d.exists and then d.is_writable
end
file_name (a_uuid: like {WSF_SESSION}.uuid): READABLE_STRING_8
local
fn: FILE_NAME
do
create fn.make_from_string (sessions_folder_name)
fn.set_file_name (a_uuid.out)
fn.add_extension ("session")
Result := fn.string
end
end