Sha256: 7a8935f50b4b592b3c2fb94da5f2ca4a6ad0584c345b1cacc9e0cf357708020e

Contents?: true

Size: 1.3 KB

Versions: 64

Compression:

Stored size: 1.3 KB

Contents

#!/usr/bin/env ruby -I ../lib -I lib
# coding: utf-8
require 'sinatra'
set :server, 'thin'
connections = []

get '/' do
  halt erb(:login) unless params[:user]
  erb :chat, :locals => { :user => params[:user].gsub(/\W/, '') }
end

get '/stream', :provides => 'text/event-stream' do
  stream :keep_open do |out|
    connections << out
    out.callback { connections.delete(out) }
  end
end

post '/' do
  connections.each { |out| out << "data: #{params[:msg]}\n\n" }
  204 # response without entity body
end

__END__

@@ layout
<html>
  <head> 
    <title>Super Simple Chat with Sinatra</title> 
    <meta charset="utf-8" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
  </head> 
  <body><%= yield %></body>
</html>

@@ login
<form action='/'>
  <label for='user'>User Name:</label>
  <input name='user' value='' />
  <input type='submit' value="GO!" />
</form>

@@ chat
<pre id='chat'></pre>

<script>
  // reading
  var es = new EventSource('/stream');
  es.onmessage = function(e) { $('#chat').append(e.data + "\n") };

  // writing
  $("form").live("submit", function(e) {
    $.post('/', {msg: "<%= user %>: " + $('#msg').val()});
    $('#msg').val(''); $('#msg').focus();
    e.preventDefault();
  });
</script>

<form>
  <input id='msg' placeholder='type message here...' />
</form>

Version data entries

64 entries across 62 versions & 6 rubygems

Version Path
classiccms-0.7.5 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
classiccms-0.7.4 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
classiccms-0.7.3 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
torquebox-console-0.3.0 vendor/bundle/jruby/1.9/gems/sinatra-1.3.5/examples/chat.rb
classiccms-0.7.2 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
classiccms-0.7.1 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
classiccms-0.7.0 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
torquebox-console-0.2.5 vendor/bundle/jruby/1.9/gems/sinatra-1.3.5/examples/chat.rb
torquebox-console-0.2.5 vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/examples/chat.rb
torquebox-console-0.2.4 vendor/bundle/jruby/1.9/gems/sinatra-1.3.5/examples/chat.rb
torquebox-console-0.2.4 vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/examples/chat.rb
torquebox-console-0.2.3 vendor/bundle/jruby/1.9/gems/sinatra-1.3.5/examples/chat.rb
sinatra-1.3.5 examples/chat.rb
sinatra-1.3.4 examples/chat.rb
classiccms-0.6.9 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
classiccms-0.6.8 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
classiccms-0.6.7 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
classiccms-0.6.6 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
classiccms-0.6.5 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb
classiccms-0.6.4 vendor/bundle/gems/sinatra-1.3.2/examples/chat.rb