Skip to content

Instantly share code, notes, and snippets.

@marcesher
Created September 4, 2012 22:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcesher/3627568 to your computer and use it in GitHub Desktop.
Save marcesher/3627568 to your computer and use it in GitHub Desktop.
websocket broadcaster example
pierequest.onMessage = function( response ){
var json = jQuery.parseJSON(response.responseBody);
var date = typeof(json.time) == 'string' ? parseInt(json.time) : json.time;
addMessage(piecontent, json.author, json.text, 'red', new Date(date));
}
var transport = 'websocket';
var chatUrl = 'http://'+document.location.hostname+':'+document.location.port+'/BroadcasterExample/atmosphere/chat';
// We are now ready to cut the request
var request = { url: chatUrl + "/all",
contentType : "application/json",
logLevel : 'debug',
shared : 'true',
transport : transport ,
fallbackTransport: 'long-polling'};
var pierequest = { url : chatUrl +"/pie",
contentType : "application/json",
logLevel : "debug",
shared : "true",
transport : transport,
fallbackTransport: "long-polling"
};
//... lots of event handler config goes here
subSocket = socket.subscribe(request);
pieSocket = socket.subscribe(pierequest)
class ChatService {
static transactional = false
static atmosphere = [mapping: '/atmosphere/chat']
.....
def onRequest = { event ->
try {
AtmosphereRequest req = event.request
if (req.method.equalsIgnoreCase("GET")) {
if( req.pathInfo.indexOf("/pie") > 0 ){
event.broadcaster = BroadcasterFactory.default.lookup("/pie", true)
} else {
event.broadcaster = BroadcasterFactory.default.lookup("/all", true)
}
event.suspend()
} else if (req.method.equalsIgnoreCase("POST")) {
String data = req.reader.readLine().trim()
MetaBroadcaster.default.broadcastTo("/all", data)
if( data.indexOf("pie") > 0 ){
MetaBroadcaster.default.broadcastTo("/pie", data)
}
}
} catch (Exception e) {
println "ERROR!!!!! $e"
}
}
if (event.isSuspended()) {
def msg = JSON.parse(event.message)
res.writer.write( createMessage(msg.author, msg.message) )
switch (r.transport()) {
case TRANSPORT.JSONP:
case TRANSPORT.LONG_POLLING:
event.resource.resume()
break
default:
res.writer.flush()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment