let remove_all_rcv_stack (name_in_session : string) : unit =
let remove_message name_in_session message =
let res = ref false in
let message_list = Hashtbl.find_all message_stack name_in_session in
let rec aux l buff =
match l with [] -> (List.iter (fun t -> (Hashtbl.add message_stack name_in_session t)) buff)
|(x::ls) -> ( Hashtbl.remove message_stack name_in_session;
if (x=message)
then(res:= true ; aux ls buff)
else(aux ls (x::buff)));
in
aux message_list [];
if(!res) then
( if(List.mem (name_in_session,message) (!add_on_stack))
then add_on_stack:=remove (name_in_session,message) (!add_on_stack)
else remove_of_stack:= (name_in_session,message)::(!remove_of_stack)
);
in
let is_agent (name,_,type_of_mess) name_in_session type_of_message = (name=name_in_session && type_of_mess=type_of_message) in
(Hashtbl.iter
(fun n message -> if(is_agent n name_in_session "_rcv_stack") then (remove_message n message))
message_stack)