Skip to content

Instantly share code, notes, and snippets.

@hns
Created May 17, 2010 09:49
Show Gist options
  • Save hns/403604 to your computer and use it in GitHub Desktop.
Save hns/403604 to your computer and use it in GitHub Desktop.
Get Websocket demo chat running in Ringo
/*
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