jschat 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +23 -0
- data/README.textile +71 -0
- data/bin/jschat-client +3 -0
- data/bin/jschat-server +18 -0
- data/bin/jschat-web +7 -0
- data/lib/jschat/client.rb +745 -0
- data/lib/jschat/errors.rb +41 -0
- data/lib/jschat/flood_protection.rb +39 -0
- data/lib/jschat/http/config/sprockets.yml +7 -0
- data/lib/jschat/http/config.ru +12 -0
- data/lib/jschat/http/jschat.rb +264 -0
- data/lib/jschat/http/public/favicon.ico +0 -0
- data/lib/jschat/http/public/images/emoticons/angry.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/arr.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/blink.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/blush.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/brucelee.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/btw.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/chuckle.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/clap.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/cool.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/drool.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/drunk.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/dry.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/eek.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/flex.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/happy.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/holmes.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/huh.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/laugh.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/lol.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/mad.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/mellow.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/noclue.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/oh.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/ohmy.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/ph34r.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/pimp.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/punch.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/realmad.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/rock.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/rofl.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/rolleyes.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/sad.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/scratch.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/shifty.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/shock.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/shrug.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/sleep.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/sleeping.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/smile.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/suicide.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/sweat.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/thumbs.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/tongue.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/unsure.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/w00t.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/wacko.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/whistling.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/wink.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/worship.gif +0 -0
- data/lib/jschat/http/public/images/emoticons/yucky.gif +0 -0
- data/lib/jschat/http/public/images/jschat.gif +0 -0
- data/lib/jschat/http/public/images/shadow.png +0 -0
- data/lib/jschat/http/public/javascripts/app/controllers/chat_controller.js +191 -0
- data/lib/jschat/http/public/javascripts/app/controllers/signon_controller.js +56 -0
- data/lib/jschat/http/public/javascripts/app/helpers/emote_helper.js +23 -0
- data/lib/jschat/http/public/javascripts/app/helpers/form_helpers.js +37 -0
- data/lib/jschat/http/public/javascripts/app/helpers/link_helper.js +47 -0
- data/lib/jschat/http/public/javascripts/app/helpers/page_helper.js +27 -0
- data/lib/jschat/http/public/javascripts/app/helpers/text_helper.js +92 -0
- data/lib/jschat/http/public/javascripts/app/lib/split.js +78 -0
- data/lib/jschat/http/public/javascripts/app/models/cookie.js +27 -0
- data/lib/jschat/http/public/javascripts/app/protocol/change.js +15 -0
- data/lib/jschat/http/public/javascripts/app/protocol/chat_request.js +13 -0
- data/lib/jschat/http/public/javascripts/app/protocol/display.js +147 -0
- data/lib/jschat/http/public/javascripts/app/ui/commands.js +55 -0
- data/lib/jschat/http/public/javascripts/app/ui/tab_completion.js +122 -0
- data/lib/jschat/http/public/javascripts/init.js +19 -0
- data/lib/jschat/http/public/stylesheets/iphone.css +3 -0
- data/lib/jschat/http/public/stylesheets/screen.css +68 -0
- data/lib/jschat/http/script/sprockets.rb +14 -0
- data/lib/jschat/http/tmp/restart.txt +0 -0
- data/lib/jschat/http/views/index.erb +23 -0
- data/lib/jschat/http/views/iphone.erb +29 -0
- data/lib/jschat/http/views/layout.erb +29 -0
- data/lib/jschat/http/views/message_form.erb +15 -0
- data/lib/jschat/server.rb +503 -0
- data/test/server_test.rb +175 -0
- data/test/stateless_test.rb +33 -0
- data/test/test_helper.rb +61 -0
- metadata +223 -0
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Copyright (c) 2009 Alex R. Young
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
|
4
|
+
obtaining a copy of this software and associated documentation
|
|
5
|
+
files (the "Software"), to deal in the Software without
|
|
6
|
+
restriction, including without limitation the rights to use,
|
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
copies of the Software, and to permit persons to whom the
|
|
9
|
+
Software is furnished to do so, subject to the following
|
|
10
|
+
conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be
|
|
13
|
+
included in all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
|
data/README.textile
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
!http://github.com/alexyoung/jschat/raw/8c11578439770962d86d6444d0c159cfb2affbcd/http/public/images/jschat.gif!
|
|
2
|
+
|
|
3
|
+
JsChat is a chat system. It has an easy to learn JSON protocol, an ncurses client, a web app, and a server. You can try it right now on "jschat.org":http://jschat.org.
|
|
4
|
+
|
|
5
|
+
JsChat is similar to IRC, but it's a fundamentally simpler system.
|
|
6
|
+
|
|
7
|
+
The *web app* has lots of interesting features:
|
|
8
|
+
|
|
9
|
+
* IRC-like commands: /names, /name new_name (/nick works too), /clear, /lastlog
|
|
10
|
+
* It's pretty tiny; it's built with "Sinatra":http://www.sinatrarb.com and "Prototype":http://prototypejs.org
|
|
11
|
+
* Auto-linking: pasting an image displays it inline, youtube and vimeo videos will appear as well
|
|
12
|
+
* Last messages are displayed on join: the last 100 messages are displayed, so you don't feel lost when you join a room
|
|
13
|
+
* Tab completion!
|
|
14
|
+
|
|
15
|
+
!http://dl.getdropbox.com/u/221414/blogs/jschat.png!
|
|
16
|
+
|
|
17
|
+
h3. Installation
|
|
18
|
+
|
|
19
|
+
You can install with rubygems:
|
|
20
|
+
|
|
21
|
+
<pre>gem install jschat</pre>
|
|
22
|
+
|
|
23
|
+
Then run <code>jschat-server</code> and <code>jschat-client</code> to try out the console client locally.
|
|
24
|
+
|
|
25
|
+
To try out the web client, run <code>jschat-web</code> and visit "http://localhost:4567":http://localhost:4567.
|
|
26
|
+
|
|
27
|
+
h3. Ruby Library Requirements
|
|
28
|
+
|
|
29
|
+
These gems are required by JsChat:
|
|
30
|
+
|
|
31
|
+
* eventmachine
|
|
32
|
+
* ncurses (for the client)
|
|
33
|
+
* json
|
|
34
|
+
|
|
35
|
+
h3. Usage
|
|
36
|
+
|
|
37
|
+
* Run the server with <em>./server.rb</em>
|
|
38
|
+
* Connect a client with <em>./client.rb</em>
|
|
39
|
+
|
|
40
|
+
The web app must be run alongside the server. The web app must be started in production mode:
|
|
41
|
+
|
|
42
|
+
<code>http/jschat.rb -e production</code>
|
|
43
|
+
|
|
44
|
+
The web app currently has no database dependencies, it's a wrapper that links cookies to JsChat server proxies. You can run it on port 80 by configuring Rack or an Apache proxy. I have Apache set up this way on "jschat.org":http://jschat.org.
|
|
45
|
+
|
|
46
|
+
h3. Client Commands
|
|
47
|
+
|
|
48
|
+
* Change name or identify: <code>/nick name</code>
|
|
49
|
+
* Join a room: <code>/join #room</code>
|
|
50
|
+
* Join a room (alias): <code>/j #room</code>
|
|
51
|
+
|
|
52
|
+
h3. Protocol Design
|
|
53
|
+
|
|
54
|
+
The protocol is designed to be as close to executable JSON as possible, so clients and servers are simple to implement.
|
|
55
|
+
|
|
56
|
+
Look at <em>client.rb</em> <code>JsChat::Protocol</code> to see what I mean.
|
|
57
|
+
|
|
58
|
+
h3. Hey, this is like Campfire!
|
|
59
|
+
|
|
60
|
+
I love Campfire and I didn't intend for JsChat to compete with it. JsChat is just a fun project, it doesn't offer Campfire's business-friendly interface, file hosting, transcripts and Basecamp integration.
|
|
61
|
+
|
|
62
|
+
h3. Credits
|
|
63
|
+
|
|
64
|
+
JsChat was created by "Alex Young":http://alexyoung.org for "Helicoid":http://helicoid.net. A growing group of friends are helping out:
|
|
65
|
+
|
|
66
|
+
* "nickmartini":http://github.com/nickmartini
|
|
67
|
+
* "gabrielg":http://github.com/gabrielg
|
|
68
|
+
* "Simon Starr":http://github.com/sstarr
|
|
69
|
+
* Kevin Ford
|
|
70
|
+
|
|
71
|
+
If you'd like to contribute, send "alexyoung":http://github.com/alexyoung a message on GitHub.
|
data/bin/jschat-client
ADDED
data/bin/jschat-server
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'logger'
|
|
4
|
+
require 'jschat/server'
|
|
5
|
+
|
|
6
|
+
logger = Logger.new(STDERR)
|
|
7
|
+
logger = Logger.new(STDOUT)
|
|
8
|
+
|
|
9
|
+
ServerConfig = {
|
|
10
|
+
:port => 6789,
|
|
11
|
+
:ip => '0.0.0.0',
|
|
12
|
+
:logger => logger,
|
|
13
|
+
:max_message_length => 500
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
EM.run do
|
|
17
|
+
EM.start_server ServerConfig[:ip], ServerConfig[:port], JsChat
|
|
18
|
+
end
|