document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/138\">EventMachine based chat<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"c1\">#!/usr/bin/env ruby<\/span>\n\n<span class=\"nb\">require<\/span> <span class=\"s1\">&#39;rubygems&#39;<\/span>\n<span class=\"nb\">require<\/span> <span class=\"s1\">&#39;eventmachine&#39;<\/span>\n\n<span class=\"k\">module<\/span> <span class=\"nn\">Chat<\/span>\n\n  <span class=\"c1\"># Called after the connection with a client has been established<\/span>\n  <span class=\"k\">def<\/span> <span class=\"nf\">post_init<\/span>\n    <span class=\"c1\"># Add ourselves to the list of clients<\/span>\n    <span class=\"p\">(<\/span><span class=\"vc\">@@connections<\/span> <span class=\"o\">||=<\/span> <span class=\"o\">[]<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"nb\">self<\/span>\n    <span class=\"n\">send_data<\/span> <span class=\"s2\">&quot;Please enter your name: &quot;<\/span>\n  <span class=\"k\">end<\/span>\n\n  <span class=\"c1\"># Called on new incoming data from the client<\/span>\n  <span class=\"k\">def<\/span> <span class=\"nf\">receive_data<\/span> <span class=\"n\">data<\/span>\n    <span class=\"c1\"># The first message from the user is its name<\/span>\n    <span class=\"vi\">@name<\/span> <span class=\"o\">||=<\/span> <span class=\"n\">data<\/span><span class=\"o\">.<\/span><span class=\"n\">strip<\/span>\n\n    <span class=\"vc\">@@connections<\/span><span class=\"o\">.<\/span><span class=\"n\">each<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">client<\/span><span class=\"o\">|<\/span>\n      <span class=\"c1\"># Send the message from the client to all other clients<\/span>\n      <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">send_data<\/span> <span class=\"s2\">&quot;<\/span><span class=\"si\">#{<\/span><span class=\"vi\">@name<\/span><span class=\"si\">}<\/span><span class=\"s2\"> says: <\/span><span class=\"si\">#{<\/span><span class=\"n\">data<\/span><span class=\"si\">}<\/span><span class=\"s2\">&quot;<\/span>\n    <span class=\"k\">end<\/span>\n  <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"c1\"># Start a server on localhost, using port 8081 and hosting our Chat application<\/span>\n<span class=\"no\">EM<\/span><span class=\"o\">::<\/span><span class=\"n\">run<\/span> <span class=\"k\">do<\/span>\n  <span class=\"no\">EM<\/span><span class=\"o\">::<\/span><span class=\"n\">start_server<\/span> <span class=\"s2\">&quot;0.0.0.0&quot;<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8081<\/span><span class=\"p\">,<\/span> <span class=\"no\">Chat<\/span>\n<span class=\"k\">end<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/zh\">zh<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/138.txt\">view raw<\/a></div>');
document.write('</div></div>');
