Skip to content

Commit

Permalink
more major changes. more bugs fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew Havens committed Feb 3, 2012
1 parent 67bf369 commit ea3c091
Show file tree
Hide file tree
Showing 13 changed files with 290 additions and 391 deletions.
64 changes: 42 additions & 22 deletions lib/mad_chatter.rb
Expand Up @@ -2,7 +2,6 @@
$:.unshift( lib_dir ) unless $:.include?( lib_dir )

require 'eventmachine'
# require 'redcarpet'
require 'yaml'
require 'json'
require 'digest/sha1'
Expand All @@ -20,11 +19,6 @@
require 'mad_chatter/message'
require 'mad_chatter/message_history'

# require 'mad_chatter/actions/dsl'
# require 'mad_chatter/actions/base'
# require 'mad_chatter/actions/join'
# require 'mad_chatter/actions/rename'

require 'mad_chatter/actions'
require 'mad_chatter/message_listeners/join'
require 'mad_chatter/message_listeners/markdown'
Expand All @@ -47,13 +41,31 @@ def users=(array)
@users = array
end

def find_user_by_token(token)
users.each do |user|
return user if user.token == token
end
end

def channels
@channels ||= []
end

def channels=(array)
@channels = array
end

def find_channel_by_id(id)
channels.each do |channel|
return channel if channel.id == id
end
end

def find_channel_by_name(name)
channels.each do |channel|
return channel if channel.name == name
end
end

def message_listeners
@message_listeners ||= []
Expand All @@ -63,28 +75,36 @@ def message_listeners=(array)
@message_listeners = array
end

def find_user_by_token(token)
users.each do |user|
return user if user.token == token
def start
config = MadChatter::Config.init
server = MadChatter::Server.new(config)
server.start
end

def message_received(json)
msg = JSON.parse(json)

if msg['token'].nil?
return # Token is required to send messages
end

message = MadChatter::Message.new('message', msg['message'], msg['token'], msg['channel'])

begin
message_listeners.each do |listener|
listener.handle(message)
end
send_message(message)
rescue RuntimeError
# dont need to do anything, just prevent any errors from stopping the server
end
end

def find_channel_by_name(name)
def send_message(message)
channels.each do |channel|
return channel if channel.name == name
channel.send_message(message) if channel.id == message.channel
end
end

end

# def self.message_listeners
# @@message_listeners ||= []
# end

def self.start
config = MadChatter::Config.init
server = MadChatter::Server.new(config)
server.start
end

end
18 changes: 9 additions & 9 deletions lib/mad_chatter/actions.rb
Expand Up @@ -5,24 +5,24 @@ def stop_message_handling
raise "Don't call any more message listeners"
end

def send_json(json)
MadChatter::Server.send_json(json)
end
# def send_json(json)
# MadChatter.send_json(json)
# end

def send_message(text, from)
MadChatter::Server.send_message MadChatter::Message.new('message', text, from)
MadChatter.send_message MadChatter::Message.new('message', text, from)
end

def send_status_message(text)
MadChatter::Server.send_message MadChatter::Message.new('status', text)
MadChatter.send_message MadChatter::Message.new('status', text)
end

def send_users_list
send_json MadChatter::Users.to_json
end
# def send_users_list
# send_json MadChatter::Users.to_json
# end

def send_action(action, *args)
MadChatter::Server.send_message MadChatter::Message.new('action', {function: action, args: args})
MadChatter.send_message MadChatter::Message.new('action', {function: action, args: args})
end

end
Expand Down
23 changes: 13 additions & 10 deletions lib/mad_chatter/channel.rb
Expand Up @@ -4,18 +4,19 @@ class Channel
attr_accessor :id, :name, :users, :message_history

def initialize(name = nil)
@id = MadChatter.channels.count
@id = MadChatter.channels.count.to_s
@name = name
@users = []
# @users = MadChatter::Users.new
@message_history = MadChatter::MessageHistory.new
# @em_channel = EventMachine::Channel.new
end

def add_user(user)
@users << user
send_message MadChatter::Message.new('status', "#{user.username} has joined the chatroom")
send_users_list
@message_history.all.each do |json|
user.send(json)
end
send_message MadChatter::Message.new('status', "#{user.username} has joined the chatroom")
end

def remove_user(user)
Expand All @@ -24,12 +25,6 @@ def remove_user(user)
send_users_list
end

def send_message(message)
json = message.to_json
send_json(json)
@message_history.add(json) if message.add_to_history?
end

def send_users_list
usernames = []
@users.each do |user|
Expand All @@ -38,10 +33,18 @@ def send_users_list
json = JSON.generate({
type: 'users',
json: usernames,
channel: @id,
})
send_json(json)
end

def send_message(message)
message.channel = @id
json = message.to_json
send_json(json)
@message_history.add(json) if message.add_to_history?
end

def send_json(json)
@users.each do |user|
user.send(json)
Expand Down
20 changes: 16 additions & 4 deletions lib/mad_chatter/config.rb
Expand Up @@ -4,12 +4,14 @@ module Config
class << self

def init
config = MadChatter::Config.initialize_config
MadChatter::Config.initialize_extensions
config = init_config
init_default_message_listeners
init_extensions
init_default_channels
return config
end

def initialize_config
def init_config
config_file = File.join(Dir.pwd, 'config.yml')
abort 'Could not find Mad Chatter config.yml file' unless File.exist?(config_file)

Expand All @@ -20,8 +22,14 @@ def initialize_config
}
@config = defaults.merge!(config)
end

def init_default_message_listeners
MadChatter.message_listeners << MadChatter::MessageListeners::Markdown.new
MadChatter.message_listeners << MadChatter::MessageListeners::Join.new
MadChatter.message_listeners << MadChatter::MessageListeners::Nick.new
end

def initialize_extensions
def init_extensions
simple_extensions_file = File.join(Dir.pwd, 'extensions.rb')
if File.exist?(simple_extensions_file)
file_contents = File.read(simple_extensions_file)
Expand All @@ -33,6 +41,10 @@ def initialize_extensions
# end
end

def init_default_channels
MadChatter.channels << MadChatter::Channel.new('default')
end

end
end
end
4 changes: 4 additions & 0 deletions lib/mad_chatter/message.rb
Expand Up @@ -29,6 +29,10 @@ def username
@username
end

def user
MadChatter.find_user_by_token(@token) if @token
end

# Helper method for returning filtered text.
def text
@filtered_text
Expand Down
24 changes: 11 additions & 13 deletions lib/mad_chatter/message_listeners/join.rb
Expand Up @@ -8,25 +8,23 @@ class Join

def handle(message)
if message.text =~ @@regex
# username = parse_username(message.text)
user = MadChatter.find_user_by_token(message.token)
# .update_username(username)
if user && message.channel
channel = MadChatter.find_channel_by_name(message.channel)
if channel
channel.add_user(user)
end
# send_status_message "#{user.username} has joined the chatroom"
# send_users_list

unless user && message.channel
stop_message_handling # user should already exist, and channel id is required
end

channel = MadChatter.find_channel_by_id(message.channel)

unless channel
stop_message_handling # you cant join a channel that doesnt exist
end

channel.add_user(user)
stop_message_handling
end
end

# def parse_username(text)
# @@regex.match(text).captures[0]
# end

end
end
end
8 changes: 4 additions & 4 deletions lib/mad_chatter/message_listeners/nick.rb
Expand Up @@ -8,11 +8,11 @@ class Nick

def handle(message)
if message.text =~ @@regex
old_username = message.username
username = parse_username(message.text)
MadChatter::Users.update(message.token, username)
send_status_message "#{old_username} is now known as #{username}"
send_users_list
user = message.user
if user
user.update_username(username)
end
stop_message_handling
end
end
Expand Down
71 changes: 0 additions & 71 deletions lib/mad_chatter/server.rb
@@ -1,21 +1,11 @@
module MadChatter

class Server

# attr_accessor :users, :channels

def initialize(config)
@config = config
@server = initialize_server
# @subscribers = {}
# @users = []
MadChatter.channels << MadChatter::Channel.new('default')
end

# def self.main_channel
# @main_channel ||= EventMachine::Channel.new
# end

def initialize_server
# TODO: Figure out a better (more flexible/dynamic) way to initialize the server class
if @config['websocket_backend'] && @config['websocket_backend'] == 'MadChatter::Servers::EventMachineWebSocket'
Expand All @@ -32,67 +22,6 @@ def start
end
end

# def register_connection(&send_message)
# subscriber_id = MadChatter::Server.main_channel.subscribe(send_message)
# token = generate_token
# send_message.call(MadChatter::Message.new('token', token).to_json)
# @subscribers[subscriber_id] = token
# MadChatter::MessageHistory.all.each do |json|
# send_message.call(json)
# end
# subscriber_id
# end
#
# def generate_token
# Digest::SHA1.hexdigest(Time.now.to_s)
# end
#
# def connection_closed(id)
# token = @subscribers.delete(id)
# username = MadChatter::Users.find_username_by_token(token)
# MadChatter::Server.main_channel.unsubscribe(id)
# MadChatter::Users.remove(token)
# MadChatter::Server.send_json(MadChatter::Message.new('status', "#{username} has left the chatroom").to_json)
# MadChatter::Server.send_json(MadChatter::Message.new('users', MadChatter::Users.current).to_json)
# end

def message_received(json)
msg = JSON.parse(json)

if msg['token'].nil?
return # Token is required to send messages
end

# username = MadChatter::Users.find_username_by_token(msg['token'])
# message = MadChatter::Message.new(msg['type'], msg['message'], msg['token'], username)
message = MadChatter::Message.new(msg['type'], msg['message'], msg['token'], msg['channel'])
# message.filter #dont filter right now

begin
MadChatter.message_listeners.each do |listener|
listener.handle(message)
end

MadChatter::Server.send_message(message)

rescue RuntimeError
# dont need to do anything, just prevent any errors from stopping the server
end
end

def self.send_message(message)
MadChatter.channels.each do |channel|
channel.send_message(message) if channel.name == message.channel
end
# json = message.to_json
# MadChatter::Server.send_json(json)
# MadChatter::MessageHistory.add(json) if ['message','status'].include? message.type
end

# def self.send_json(json)
# MadChatter::Server.main_channel.push(json)
# end

end

end

0 comments on commit ea3c091

Please sign in to comment.