anchor.diff:    websocket_handle(jsxn:decode(Msg), Req, Opts);
   websocket_handle(#{<<"command">> := <<"hello">>}, Req, Opts) ->
     ok = gen_event:add_handler(?MODULE, {?MODULE, self()}, [self()]),
  +  io:format("LiveReload client connected~n"),
     {reply, {text, ?HELLO_RESPONSE}, Req, Opts};
   websocket_handle(_Data, Req, Opts) ->
     {ok, Req, Opts}.
   
   websocket_info({reload, File}, Req, Opts) ->
     {reply, {text, ?RELOAD(File)}, Req, Opts};
  +websocket_info({alert, Message}, Req, Opts) ->
  +  {reply, {text, ?ALERT(Message)}, Req, Opts};
   websocket_info(_Info, Req, Opts) ->
     {ok, Req, Opts}.
   
  
positive.code: init([Pid]) ->
    {ok, Pid}.
  
  handle_event({reload, File}, Pid) ->
    Pid ! {reload, File},
    {ok, Pid}.
  
  handle_call(_, Pid) ->
  
negative.code: reload(File) ->
    gen_event:notify(?MODULE, {reload, File}).
  
  alert(Message) ->
    gen_event:notify(?MODULE, {alert, Message}).
  
  init(_TransportName, Req, Opts) ->
    case cowboy_req:header(<<"upgrade">>, Req) of
      {<<"websocket">>, _} ->
  