magent 0.5.1 → 0.5.2

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.1
1
+ 0.5.2
@@ -7,60 +7,60 @@ module Magent
7
7
  $stdout.puts ">> Server running and up! #{options}}" if options[:debug]
8
8
 
9
9
  EventMachine.run do
10
- @channel = EM::Channel.new
11
- @channels = {}
12
- @channel_ids = {}
13
- @sids = {}
10
+ setup
14
11
 
15
12
  EM.run do
16
- EventMachine.add_periodic_timer(options.delete(:interval)||10) do
17
- while message = Magent::WebSocketChannel.dequeue
18
- if (channel = @channels[message["channel_id"]])
19
- channel.push(message.to_json)
13
+ EventMachine.add_periodic_timer(options.delete(:interval)||10) do
14
+ while message = Magent::WebSocketChannel.dequeue
15
+ if (channel = @channels[message["channel_id"]])
16
+ channel.push(message.to_json)
17
+ end
20
18
  end
21
19
  end
22
20
  end
23
- end
24
21
 
25
22
  EventMachine::WebSocket.start(options) do |ws|
26
23
  ws.onopen do
27
24
  ws.onmessage do |msg|
28
25
  data = JSON.parse(msg) rescue {}
29
26
 
30
- case data["id"]
31
- when 'start'
32
- if data["channel_id"].present? && (channel_id = validate_channel_id(data["channel_id"]))
33
- key = generate_unique_key(data["key"])
34
- @channels[channel_id] ||= EM::Channel.new
35
- @channel_ids[key] = channel_id
36
-
37
- sid = @channels[channel_id].subscribe { |msg| ws.send(msg) }
38
-
39
- @sids[key] = sid
40
- ws.onclose do
41
- @channel_ids.delete(key)
42
- @channels[channel_id].unsubscribe(sid)
43
- @sids.delete(key)
27
+ if !handle_message(ws, data)
28
+ case data["id"]
29
+ when 'start'
30
+ if data["channel_id"].present? && (channel_id = validate_channel_id(data["channel_id"]))
31
+ key = generate_unique_key(data["key"])
32
+ @channels[channel_id] ||= EM::Channel.new
33
+ @channel_ids[key] = channel_id
34
+
35
+ sid = @channels[channel_id].subscribe { |msg| ws.send(msg) }
36
+
37
+ @sids[key] = sid
38
+ ws.onclose do
39
+ @channel_ids.delete(key)
40
+ @channels[channel_id].unsubscribe(sid)
41
+ @sids.delete(key)
42
+ end
43
+
44
+ ws.send({:id => "ack", :key => key}.to_json)
45
+ send(:on_ack, ws, channel_id) if respond_to?(:on_ack)
46
+ else
47
+ ws.close_connection
44
48
  end
49
+ when 'chatmessage'
50
+ key = data["key"]
51
+ return invalid_key(ws) if key.blank? || @sids[key].blank?
45
52
 
46
- ws.send({:id => "ack", :key => key}.to_json)
47
- else
48
- ws.close_connection
49
- end
50
- when 'chatmessage'
51
- key = data["key"]
52
- return invalid_key if key.blank? || @sids[key].blank?
53
+ channel_id = @channel_ids[key]
53
54
 
54
- channel_id = @channel_ids[key]
55
+ if channel_id
56
+ chat_message = {:id => 'chatmessage', :from => user_name(key, @sids[key]), :message => data["message"]}
55
57
 
56
- if channel_id
57
- @channels[channel_id].push({:id => 'chatmessage', :from => user_name(key, @sids[key]), :message => data["message"]}.to_json)
58
- else
59
- ws.send({:id => 'announcement', :type => "error", :message => "cannot find the channel"}.to_json)
58
+ @channels[channel_id].push(validate_chat_message(channel_id, chat_message).to_json)
59
+ else
60
+ ws.send({:id => 'announcement', :type => "error", :message => "cannot find the channel"}.to_json)
61
+ end
60
62
  end
61
- else
62
- handle_message(ws, data)
63
- end
63
+ end # if
64
64
  end
65
65
  end
66
66
  end # EM::WebSocket
@@ -71,13 +71,24 @@ module Magent
71
71
  self.new(options)
72
72
  end
73
73
 
74
+ def setup
75
+ @channel = EM::Channel.new
76
+ @channels = {}
77
+ @channel_ids = {}
78
+ @sids = {}
79
+ end
80
+
74
81
  protected
75
82
  def invalid_key(ws)
76
83
  ws.send({:id => 'announcement', :type => "error", :message => "you must provide your unique key"}.to_json)
77
84
  end
78
85
 
79
86
  def handle_message(ws, data)
80
- ws.send({:id => 'announcement', :type => "error", :message => "unhandled message: #{data.inspect}"}.to_json)
87
+ false
88
+ end
89
+
90
+ def validate_chat_message(channel_id, chat_message)
91
+ chat_message
81
92
  end
82
93
 
83
94
  protected
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{magent}
8
- s.version = "0.5.1"
8
+ s.version = "0.5.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David A. Cuadrado"]
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 5
8
- - 1
9
- version: 0.5.1
8
+ - 2
9
+ version: 0.5.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - David A. Cuadrado