@@ -35,8 +35,25 @@ defmodule Hound.SessionServer do
35
35
36
36
37
37
def change_current_session_for_pid ( pid , session_name , opts ) do
38
- { :ok , session_id } =
39
- GenServer . call ( @ name , { :change_session , pid , session_name , opts } , 60000 )
38
+ { :ok , driver_info } = Hound . driver_info
39
+
40
+ sessions =
41
+ case :ets . lookup ( @ name , pid ) do
42
+ [ { ^ pid , _session_id , sessions } ] ->
43
+ sessions
44
+ [ ] -> % { }
45
+ end
46
+
47
+ { session_id , sessions } =
48
+ case Map . fetch ( sessions , session_name ) do
49
+ { :ok , session_id } ->
50
+ { session_id , sessions }
51
+ :error ->
52
+ session_id = create_session ( driver_info , opts )
53
+ { session_id , Map . put ( sessions , session_name , session_id ) }
54
+ end
55
+
56
+ :ok = GenServer . call ( @ name , { :register , pid , session_id , sessions } , 60000 )
40
57
session_id
41
58
end
42
59
@@ -66,29 +83,9 @@ defmodule Hound.SessionServer do
66
83
end
67
84
68
85
69
- def handle_call ( { :change_session , pid , session_name , opts } , _from , state ) do
70
- { :ok , driver_info } = Hound . driver_info
71
-
72
- sessions =
73
- case :ets . lookup ( @ name , pid ) do
74
- [ { ^ pid , _session_id , sessions } ] ->
75
- sessions
76
- [ ] -> % { }
77
- end
78
-
79
- { session_id , sessions } =
80
- case Map . fetch ( sessions , session_name ) do
81
- { :ok , session_id } ->
82
- { session_id , sessions }
83
- :error ->
84
- session_id = create_session ( driver_info , opts )
85
- { session_id , Map . put ( sessions , session_name , session_id ) }
86
- end
87
-
86
+ def handle_call ( { :register , pid , session_id , sessions } , _from , state ) do
88
87
:ets . insert ( @ name , { pid , session_id , sessions } )
89
- { :reply , { :ok , session_id } , monitor_session ( pid , state ) }
90
- rescue
91
- error -> { :reply , { :error , error } , state }
88
+ { :reply , :ok , monitor_session ( pid , state ) }
92
89
end
93
90
94
91
def handle_call ( { :destroy_sessions , pid } , _from , state ) do
0 commit comments