Не очень понятно что нужно.
Ели у вас сторонний сервер авторизации, то пусть он выдает токены.
Когда приходит месага с этим токеном, валидатите токен на сервере
авторизации, стартуете сессию для
пользователя, регистрируете ее на этот токен. Далее из этой сессии
пересылаете месагу в комнату, к месаге прибавляете пид. Комната путь
держит пиды тех кто в нее писал. процесс пользователя хранит пиды
комнат в которые были посланы месаги. По истечению сессии пользователя
он должен послать сигнал во все комнаты в которые он подписан, о
завершении процесса. Соответственно на любое событие в комнате
оповещаете всех по списку пидов. В сесси пользователя также держите
пид вебсокета ковбоя, чтобы отсылать, пуши.
Как то оно не просто, но интерактивность она такая..
3 октября 2014 г., 9:48 пользователь Vladimir Drjupin
<
demx...@gmail.com> написал:
> Мануал-то понятен, что и для чего. Я не до конца понимаю процессов, которые
> организует Ковбой, фактически, первая регистрация в примере идет в блоке
> init, при "рукопожатии" браузера с сервером. Там у нас есть Pid процесса,
> который регистрируется в gproc.
>
> websocket_init(_Any, Req, _Opt) ->
> gproc:reg({p,l, main_room}),
> {ok, Req, undefined, hibernate}.
>
> Т.е. тут PID вызывающей функции -> websocket_init -> gproc регистрация этого
> вызывающего PID под property main_room.
>
> А вот следующий блок:
>
> websocket_handle({text,Data}, Req, State) ->
> gproc:send({p,l,main_room},Data),
> {ok, Req,State, hibernate};
> websocket_handle(_Any, Req, State) ->
> {ok, Req, State, hibernate}.
>
> прием сообщения и далее логика - рассылка или анализ, можно ли в этой
> функции провести регистрацию, тот же будет Pid процесса, что при
> websocket_init или нет. Как-то так:
>
> websocket_handle({text,Data}, Req, State) ->
> Dt = jiffy:decode(Data).
> case Dt of
> {<<act>>,<<register>>,_,Name} ->
> gproc:reg({p,l, main_room}), % - регистрация в комнате для групповой
> рассылки по всем в комнате
> gproc:reg({n,l, Name}); % - уникальная регистрация для сообщения
> конкретному пользователю
> _ ->
> gproc:send({p,l,main_room},Data);
> end.
> {ok, Req,State, hibernate};
> websocket_handle(_Any, Req, State) ->
> {ok, Req, State, hibernate}.
>