[feat] use cowboy ranch with custom protocol instead of hand-made socket listener