fix(server) beforeJoin: exec -> retExec
feature(util) add execOnMatch