Created
May 17, 2010 09:49
-
-
Save hns/403604 to your computer and use it in GitHub Desktop.
Get Websocket demo chat running in Ringo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
to get websocket protocol running in ringojs, do the following: | |
* copy jetty-websocket-7.*.jar into your classpath (e.g. lib/) | |
* add the following line to your webapp's config.js module: | |
exports.extensions = ["ringo-websocket"]; | |
with "ringo-websocket" being the module name of this file. | |
* download the client script from this page: | |
http://blogs.webtide.com/gregw/entry/jetty_websocket_server | |
change the location to: | |
"ws://localhost:8080/websocket" | |
and serve it as static resource from your ringo webapp. | |
* Load that page in a browser that supports Websockets | |
changelog: | |
2010-05-26: updated to ringo/httpserver changes in git master | |
see: | |
http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/websocket/WebSocketServlet.html | |
http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/websocket/WebSocket.html | |
http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/websocket/WebSocket.Outbound.html | |
*/ | |
// URL path for websocket servlet | |
var mountpoint = "/websocket"; | |
var log = require("ringo/logging").getLogger(module.id); | |
var {WebSocket, WebSocketServlet} = org.eclipse.jetty.websocket; | |
require("core/array"); | |
module.shared = true; | |
var members = []; | |
exports.serverStarted = function(server) { | |
log.info("Starting websocket support"); | |
server.getDefaultContext().addServlet(mountpoint, new WebSocketServlet({ | |
doGet : function(request, response){ | |
log.info("get"); | |
}, | |
doWebSocketConnect : function(request, protocol){ | |
log.info("websocketconnect"); | |
return new WebSocket({ | |
onConnect: function(outbound) { | |
log.info("onConnect"); | |
members.push(outbound); | |
this.connection = outbound; | |
}, | |
onMessage: function(frame, data) { | |
log.info("onMessage", frame, data); | |
members.forEach(function(member) { | |
try { | |
log.info("sending to", member); | |
member.sendMessage(frame, data); | |
} catch (error) { | |
log.error("error sending message", error); | |
} | |
}); | |
}, | |
onDisconnect: function() { | |
log.info("onDisconnect"); | |
members.remove(this.connection); | |
} | |
}); | |
} | |
})); | |
}; | |
exports.serverStopped = function(server) { | |
// currently not called in console mode | |
log.info("Stopping websocket support"); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment