2011-07-29 23 views
1

私はAtmosphereプラグインを使ってブラウザにデータをプッシュするGrailsアプリケーションを作成しています。しかし、私は単一のユーザー(セッションのユーザー)にブロードキャストチャネルを作成する際に問題があります。持っている私のコードは次のとおりです。Atmosphere Grailsシングルユーザ放送

サービス:

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を放送します。私が達成したいのは、現在のユーザーだけに放送することです。 アイデア 詳細が必要な場合は、私に知らせてください。私はあなたがonRequestのイベントを共有するためにセッションを使用することができると考えて

おかげ

+0

このように見えますか? http://stackoverflow.com/questions/4543831/unable-to-broadcast-to-single-connection-using-atmosphere-runtime –

答えて

0

コントローラで、その後
request.session[userId]=event 

broadcast(jsonResult,session[userId]) 
0

あなたはGrailsの中にあなたのイベントを定義するときは、browserFilterクロージャを使用してcientsをフィルタリングすることができます。

0

ちょっと、それぞれの雰囲気のリソースに割り当てられているuuidを利用することができます。あなたがセッションに

session.broadcaster.broadcast(するJsonResult、AtmosphereResource)を渡すことができ
String suspendedUUID = (String)req.getAttribute(ApplicationConfig.SUSPENDED_ATMOSPHERE_RESOURCE_UUID);

0

:あなたがすることができる雰囲気要求に基づいて中断UUIDを取得するに 。このAPIを参照してください。

- Jeanfrancois(Atmosphere's Creator)