magent 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
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