open Wd_dialog open Wd_types let _ = Random.self_init let random_char () = if Random.bool () then Char.chr ((Random.int 26) + 65) else Char.chr ((Random.int 26) + 97) let make_session_id () = let length = 128 + (Random.int 128) in let id = String.create length in for i=0 to length - 1 do id.[i] <- random_char () done; id exception Session_not_found class memory_session (id: string) (instant_session: session_type) = object val id = id val instant_session = instant_session method commit_changes () = () method serialize = id method change_dialog dlg = instant_session#change_dialog dlg method dialog = instant_session#dialog method dialog_name = instant_session#dialog_name end;; class memory_session_manager = object inherit instant_session_manager () as super val sessions = Hashtbl.create 500 method create dlg = let instant_session = super#create dlg in let id = make_session_id () in let memses = new memory_session id instant_session in Hashtbl.replace sessions id memses; memses method unserialize universe env id = try Hashtbl.find sessions id with Not_found -> raise Session_not_found end;;