Атмосфера Grails однопользовательская трансляция - PullRequest
1 голос
/ 29 июля 2011

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

Услуги:

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 каждому пользователю. Чего я хочу добиться, так это трансляции только для текущего пользователя. Есть идеи? Если вам нужно больше деталей, просто дайте мне знать.

Спасибо

Ответы [ 4 ]

0 голосов
/ 27 сентября 2013

Вы можете пройти сеанс

session.broadcaster.broadcast (jsonResult, AtmosphereResource). Смотрите это API .

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

0 голосов
/ 16 мая 2013

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

0 голосов
/ 22 сентября 2013

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

0 голосов
/ 09 сентября 2011

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

request.session[userId]=event

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

broadcast(jsonResult,session[userId])
...