Skip to content

Instantly share code, notes, and snippets.

@v1p
Created November 27, 2015 12:37
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 v1p/ea797fc08f345f5e91f6 to your computer and use it in GitHub Desktop.
Save v1p/ea797fc08f345f5e91f6 to your computer and use it in GitHub Desktop.
Pushpin config with Grails controller
class PushpinController {
def index() {
log.debug "BEGIN - Pushpin Connection!"
response.setHeader('Sec-WebSocket-Extensions', 'grip; message-prefix=""')
response.contentType = 'application/websocket-events'
String body = request.getReader().text
String responseMessage = ""
List<WebSocketEvent> inEvents = GripControl
.decodeWebSocketEvents(body)
if (request.method == 'POST' && inEvents.size() > 0) {
log.debug "First Instr : ${inEvents.get(0).type}"
switch (inEvents.get(0).type) {
case 'OPEN':
log.debug "Open from ${request.getRemoteAddr()}"
responseMessage = GripControl.encodeWebSocketEvents([
new WebSocketEvent('OPEN')
])
break
case 'TEXT':
JsonSlurper jsonSlurper = new JsonSlurper()
def content = jsonSlurper.parseText(inEvents.get(0).content)
String type = content['type'].toString()
String channel = content['channel'].toString().replaceAll(/[\@\.]/, '_')
switch (type) {
case 'subscribe':
log.debug "Subscribe from ${request.getRemoteAddr()}"
String controlMessage = "c:${GripControl.webSocketControlMessage(content['type'].toString(), ['channel': channel])}"
log.debug "Channel : ${channel}"
log.debug "Pushpin : ${controlMessage}"
responseMessage = GripControl.encodeWebSocketEvents([
new WebSocketEvent('TEXT', controlMessage)
])
break
case 'ping':
log.debug "Ping from ${request.getRemoteAddr()}"
responseMessage = GripControl.encodeWebSocketEvents([
new WebSocketEvent('PONG', 'pong')
])
break
}
break
}
}
response.outputStream << responseMessage
response.outputStream.flush()
log.debug "END - Pushpin Connection!"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment