2011-07-29 6 views
1

Я создаю приложение Grails, которое использует плагин Atmosphere для ввода данных в браузер. Однако у меня возникают проблемы с созданием широковещательного канала для одного пользователя (пользователя сеанса). Мой код имеет следующие:Атмосфера Grails single user broadcast

Услуги:

static atmosphere = [mapping: '/atmosphere/recommend'] 

def onRequest = { event -> 
    def request = event.request 
    def response = event.response 

    event.suspend()  

    def broadcaster = event.broadcaster 
    request.session.broadcaster = broadcaster 
    broadcaster.broadcasterConfig.addFilter(new XSSHtmlFilter())  
} 

def onStateChange = { event -> 

    if (!event.message) return 

    event.resource.response.writer.with { 
     write "<script>parent.callback('${event.message}');</script>" 
     flush() 
    } 
} 

Контроллер:

def builder = new JSONBuilder() 
    def jsonResult = builder.build{ 
          artist = artistInstance 
          location = { 
           lat = eventInstance.location.lat 
           lng = eventInstance.location.lng 
          } 
         } 

session.broadcaster.broadcast(jsonResult) 

Это решение транслирует JsonResult каждому пользователю. То, что я хочу достичь, - это трансляция только для текущего пользователя. Любые идеи? Если вам нужна дополнительная информация, просто дайте мне знать.

Благодаря

+0

похоже, что это похоже на то, чего вы не хотите? http://stackoverflow.com/questions/4543831/unable-to-broadcast-to-single-connection-using-atmosphere-runtime –

ответ

0

Я думает, что вы можете использовать сессии для обмена события в onRequest в.

request.session[userId]=event 

затем в контроллере:

broadcast(jsonResult,session[userId]) 
0

Когда вы определяете события в Грааль, вы можете отфильтровать фициенты с помощью закрытия browserFilter.

0

Эй, вы можете использовать uuid, который присваивается каждому источнику Атмосферы. Чтобы получить подвешенный UUID на основе атмосферы запроса вы можете сделать:
String suspendedUUID = (String)req.getAttribute(ApplicationConfig.SUSPENDED_ATMOSPHERE_RESOURCE_UUID);

0

вы можете передать сеанс

session.broadcaster.broadcast (JsonResult, AtmosphereResource). См. Это API.

- Jeanfrancois (Создатель атмосферы)

Смежные вопросы