2012-01-11 3 views
0

Groovy Magの雰囲気の例(https://github.com/rbramley/GroovyMagJMS)を拡張して、さまざまなクライアントにブロードキャストしようとしています。 (Broadcasting to a subset of subscribers in Atmosphereのように)Grails Atmosphereプラグインが異なるクライアントにブロードキャストされる

クライアントはURL http://localhost:8080/GrailsTest/atmosphere/messages/?id=1に接続します。 IDがサーバーに渡されます。新たに追加されたlookupBroadcasterメソッドは、idを持つ新しいBroadcasterオブジェクトを作成します。メッセージをブロードキャストしたいとき、クライアントは結果を受け取らない。

誰かが私を助け、それを試してみることはできますか?

'/ atmosphere/messages/*'のようなマッピングを使用するために、0.8.2ライブラリをBuildConfig.groovyに追加しました。

dependencies { 
    runtime 'org.atmosphere:atmosphere-runtime:0.8.2' 
} 


class AtmosphereService { 

static transactional = false 

static atmosphere = [mapping: '/atmosphere/messages/*'] 

static exposes = ['jms'] 

@Subscriber(topic='msgevent') 
def onEvent(msg) { 
    println 'onevent' 
    def payload = msg 
    if(msg instanceof Map) { 
     // convert map messages to JSON 
     payload = msg.encodeAsJSON() 
    } 

    Broadcaster b = lookupBroadcaster(msg["id"], false); 
    b.broadcast(payload) 

    return null 
} 

Broadcaster lookupBroadcaster(String id, Boolean createBroadcast) { 
    return BroadcasterFactory.getDefault().lookup(id, createBroadcast) 
} 

def onRequest = { event -> 

    def req = event.request 
    def id = req.getParameter("id") 

    Broadcaster b = lookupBroadcaster(id, true); 
    event.setBroadcaster(b); 
    b.addAtmosphereResource(event) 

    event.suspend() 

} 

def onStateChange = { event -> 
    if (event.message) { 
     log.info "onStateChange, message: ${event.message}" 

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

}

答えて

0

Salutの。

これは、そのコードスニペットに基づいて動作するはずです。ブロードキャスト時にonStateChange()メソッドが呼び出されますか?あなたが再開しているので、最初のブロードキャストは動作しますが、その後、AtmosphereResourceは関連するブロードキャスタから削除されるため、それ以上のアップデートはありません。

おかげ

- Jeanfrancois

関連する問題