use gen_server instead single module