smartfox 0.3.1 → 0.4.0

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.
Files changed (5) hide show
  1. data/Rakefile +15 -11
  2. data/VERSION +1 -1
  3. data/lib/smartfox/client.rb +62 -41
  4. metadata +8 -34
  5. data/.gitignore +0 -21
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ begin
10
10
  gem.email = "self@richardpenwell.me"
11
11
  gem.homepage = "http://github.com/penwellr/smartfox"
12
12
  gem.authors = ["Richard Penwell"]
13
- gem.add_development_dependency "rspec", ">= 1.2.9"
13
+ gem.add_development_dependency "rspec", "~> 2.0"
14
14
  gem.add_dependency 'json'
15
15
  gem.add_dependency 'builder'
16
16
  gem.add_dependency 'libxml-ruby'
@@ -22,17 +22,21 @@ rescue LoadError
22
22
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
23
23
  end
24
24
 
25
- require 'spec/rake/spectask'
26
- Spec::Rake::SpecTask.new(:spec) do |spec|
27
- spec.libs << 'lib' << 'spec'
28
- spec.spec_files = FileList['spec/**/*_spec.rb']
29
- end
25
+ begin
26
+ require 'rspec/core/rake_task'
27
+ RSpec::Core::RakeTask.new(:spec) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.spec_files = FileList['spec/**/*_spec.rb']
30
+ end
30
31
 
31
- Spec::Rake::SpecTask.new(:rcov) do |spec|
32
- spec.libs << 'lib' << 'spec'
33
- spec.pattern = 'spec/**/*_spec.rb'
34
- spec.rcov = true
35
- spec.rcov_opts = ['--exclude', "features,kernel,load-diff-lcs\.rb,instance_exec\.rb,lib/spec.rb,lib/spec/runner.rb,^spec/*,bin/spec,examples,/gems,/Library/Ruby,\.autotest,#{ENV['GEM_HOME']}"]
32
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
33
+ spec.libs << 'lib' << 'spec'
34
+ spec.pattern = 'spec/**/*_spec.rb'
35
+ spec.rcov = true
36
+ spec.rcov_opts = ['--exclude', "features,kernel,load-diff-lcs\.rb,instance_exec\.rb,lib/spec.rb,lib/spec/runner.rb,^spec/*,bin/spec,examples,/gems,/Library/Ruby,\.autotest,#{ENV['GEM_HOME']}"]
37
+ end
38
+ rescue
39
+ puts "Rspec ~> 2.0 (or a dependency) is not available. Install it with: gem install rspec"
36
40
  end
37
41
 
38
42
  task :spec => :check_dependencies
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.4.0
@@ -6,16 +6,17 @@ class SmartFox::Client
6
6
  class ConnectionFailureError < SmartFox::SmartFoxError; end
7
7
  class ApiIncompatibleError < SmartFox::SmartFoxError; end
8
8
  class TransportTimeoutError < SmartFox::SmartFoxError; end
9
-
9
+
10
10
  attr_reader :connected, :room_list, :buddy_list, :server, :port
11
- attr_reader :current_room, :users, :user_id
11
+ attr_reader :current_room, :users
12
12
  alias_method :connected?, :connected
13
+ attr_accessor :user_id, :user_name
13
14
 
14
15
  CLIENT_VERSION = "1.5.8"
15
16
  CONNECTION_TIMEOUT = 5
16
17
  TRANSPORTS = [ SmartFox::Socket::Connection, SmartFox::BlueBox::Connection ]
17
18
  EVENTS = [ :connected, :logged_in, :rooms_updated ]
18
-
19
+
19
20
  HEADER_SYSTEM = 'sys'
20
21
  HEADER_EXTENDED = 'xt'
21
22
 
@@ -24,12 +25,13 @@ class SmartFox::Client
24
25
  ACTION_API_OBSOLETE = 'apiKO'
25
26
  ACTION_LOGIN = 'login'
26
27
  ACTION_LOGIN_OK = 'logOK'
27
- ACTION_AUTO_JOIN = 'autoJoin'
28
+ ACTION_AUTO_JOIN = 'autoJoin'
29
+ ACTION_JOIN_ROOM = 'joinRoom'
28
30
  ACTION_UPDATE_ROOMS = 'getRmList'
29
31
  ACTION_ROOM_LIST = 'rmList'
30
32
  ACTION_JOIN_OK = 'joinOK'
31
33
  ACTION_JOIN_FAIL = 'joinKO'
32
-
34
+
33
35
  EXTENDED_RESPONSE = 'xtRes'
34
36
 
35
37
  def initialize(options = {})
@@ -52,11 +54,11 @@ class SmartFox::Client
52
54
  started_at = Time.now
53
55
  @transport = transport_class.new(self)
54
56
  @transport.connect
55
-
57
+
56
58
  while not connected? and Time.now <= started_at + CONNECTION_TIMEOUT
57
59
  Thread.pass
58
60
  end
59
-
61
+
60
62
  return @transport if connected?
61
63
  rescue
62
64
  end
@@ -64,52 +66,66 @@ class SmartFox::Client
64
66
  raise ConnectionFailureError.new "Could not negotiate any transport with server."
65
67
  end
66
68
  end
67
-
69
+
68
70
  def disconnect
69
71
  if @connected
70
72
  @transport.disconnect
71
73
  @connected = false
72
74
  end
73
- end
74
-
75
+ end
76
+
75
77
  def extended_command(action, data = nil, room = -1, options = {})
76
78
  options[:format] ||= :xml
77
-
79
+
78
80
  case options[:format]
79
- when :xml
81
+ when :xml
80
82
  send_packet(HEADER_EXTENDED, action, room) { |x| x.cdata!(data || '') }
81
83
  end
82
84
  end
83
-
85
+
84
86
  def add_handler(event, &proc)
85
87
  @events[event.to_sym] = [] unless @events[event.to_sym]
86
88
  @events[event.to_sym] << proc
87
89
  end
88
-
90
+
89
91
  def refresh_rooms
90
92
  send_packet(HEADER_SYSTEM, ACTION_UPDATE_ROOMS)
91
93
  end
92
-
94
+
93
95
  def connect_succeeded
94
96
  send_packet(HEADER_SYSTEM, ACTION_VERSION_CHECK, 0) { |x| x.ver(:v => CLIENT_VERSION.delete('.')) }
95
97
  end
96
-
98
+
97
99
  def auto_join
98
100
  send_packet(HEADER_SYSTEM, ACTION_AUTO_JOIN)
101
+ end
102
+
103
+ def join_room(room)
104
+ #CHECK: activeRoomId == -1 no room has already been entered
105
+ if(@current_room == -1 || @current_room == nil)
106
+ leave_current_room = "0"
107
+ room_to_leave = -1
108
+ else
109
+ leave_current_room = "1"
110
+ room_to_leave = @current_room
111
+ end
112
+ send_packet(HEADER_SYSTEM, ACTION_JOIN_ROOM, room.id) { |x|
113
+ x.room(:id=>room.id,:pwd=>'',:spec=>'0',:leave=>leave_current_room,:old=>room_to_leave)
114
+ }
99
115
  end
100
-
116
+
101
117
  def packet_recieved(data)
102
118
  begin
103
119
  SmartFox::Logger.debug "SmartFox::Client#packet_recieved('#{data}')"
104
- packet = SmartFox::Packet.parse(data)
120
+ packet = SmartFox::Packet.parse(data)
105
121
  case packet.header
106
- when HEADER_SYSTEM
122
+ when HEADER_SYSTEM
107
123
  if @connected
108
124
  handle_system_packet(packet)
109
125
  else
110
126
  complete_login(packet)
111
127
  end
112
- when HEADER_EXTENSION
128
+ when HEADER_EXTENDED
113
129
  raise_event :extended_response, self, packet.data
114
130
  end
115
131
  rescue => e
@@ -117,7 +133,7 @@ class SmartFox::Client
117
133
  SmartFox::Logger.exception e
118
134
  end
119
135
  end
120
-
136
+
121
137
  def login(zone, username, password = nil)
122
138
  send_packet(HEADER_SYSTEM, ACTION_LOGIN) do |packet|
123
139
  packet.login(:z => zone) do |login|
@@ -127,20 +143,21 @@ class SmartFox::Client
127
143
  end
128
144
  Thread.pass
129
145
  end
130
-
146
+
131
147
  def send_extended(extension, action, options)
148
+ SmartFox::Logger.debug "send_extended #{extension},#{action},#{options}"
132
149
  options[:format] ||= :xml
133
- options[:room] ||= (current_room ? current_room.id : 0)
150
+ options[:room] ||= (@current_room ? @current_room.id : 0)
134
151
  options[:parameters] ||= {}
135
-
152
+
136
153
  case options[:format]
137
- when :xml
138
-
154
+ when :xml
155
+
139
156
  when :json
140
157
  send_extended_json_packet(extension, action, options[:room], options[:parameters])
141
158
  end
142
159
  end
143
-
160
+
144
161
  def parse_user(node)
145
162
  if user = @users[node['i'].to_i]
146
163
  user.parse(node)
@@ -148,7 +165,7 @@ class SmartFox::Client
148
165
  @users[node['i'].to_i] = SmartFox::User.parse(node)
149
166
  end
150
167
  end
151
-
168
+
152
169
  private
153
170
  def send_packet(header, action, room_id = -1)
154
171
  xml = Builder::XmlMarkup.new()
@@ -163,13 +180,13 @@ class SmartFox::Client
163
180
  SmartFox::Logger.debug "SmartFox::Client#send_packet -> #{packet}"
164
181
  @transport.send_data(packet + "\0")
165
182
  end
166
-
183
+
167
184
  def send_extended_json_packet(name, action, room, object)
168
185
  packet = { :t => 'xt', :b => { :x => name, :c => action, :r => room, :p => object } }
169
186
  SmartFox::Logger.debug "SmartFox::Client#send_extended_json_packet -> #{packet.to_json}"
170
187
  @transport.send_data(packet.to_json + "\0")
171
188
  end
172
-
189
+
173
190
  def raise_event(event_name, *params)
174
191
  event = @events[event_name.to_sym]
175
192
  return unless event
@@ -177,7 +194,7 @@ class SmartFox::Client
177
194
  event_handler.call(*params)
178
195
  end
179
196
  end
180
-
197
+
181
198
  def complete_login(connect_response)
182
199
  if connect_response.header == HEADER_SYSTEM and connect_response.action == ACTION_API_OK
183
200
  @connected = true
@@ -187,32 +204,36 @@ class SmartFox::Client
187
204
  raise ApiIncompatibleError if connect_response.action == ACTION_API_OBSOLETE
188
205
  raise ConnectionFailureError.new "Did not recieve an expected response from the server."
189
206
  end
190
- end
191
-
207
+ end
208
+
192
209
  def handle_system_packet(packet)
193
- case packet.action
194
- when ACTION_LOGIN_OK
210
+ SmartFox::Logger.debug "packet.action=#{packet.action}"
211
+ case packet.action
212
+ when ACTION_LOGIN_OK
213
+ SmartFox::Logger.debug "packet.data = #{packet.data}"
214
+ SmartFox::Logger.debug "packet.data.first = #{packet.data.first}"
195
215
  @username = packet.data.first['n']
196
216
  @moderator = packet.data.first['mod'] != "0"
197
217
  @user_id = packet.data.first['id'].to_i
198
218
  SmartFox::Logger.info "SmartFox::Client logged in as #{@username} (ID:#{@user_id})"
199
219
  raise_event(:logged_in, self)
200
- when ACTION_ROOM_LIST
220
+ when ACTION_ROOM_LIST
201
221
  @rooms.clear
202
222
  packet.data.first.children.each do |room|
203
223
  room_object = SmartFox::Room.parse(self, room)
204
224
  @rooms[room_object.id] = room_object
225
+ @room_list=@rooms
205
226
  end
206
-
227
+
207
228
  raise_event(:rooms_updated, self, @rooms)
208
- when ACTION_JOIN_OK
229
+ when ACTION_JOIN_OK
209
230
  @current_room = @rooms[packet.room]
210
231
  SmartFox::Logger.info "SmartFox::Client joined room #{packet.room}"
211
232
  SmartFox::Logger.debug "SmartFox::Client#handle_system_packet ACTION_JOIN_OK data => #{packet.data}"
212
233
  @current_room.joined
213
234
  @current_room.parse_users(packet.data.find{|n| n.name == 'uLs'})
214
235
  raise_event(:room_joined, self, @current_room)
215
- when ACTION_JOIN_FAIL
236
+ when ACTION_JOIN_FAIL
216
237
  raise_event(:room_join_failed, self)
217
238
  else
218
239
  if packet.room > 0
@@ -220,6 +241,6 @@ class SmartFox::Client
220
241
  end
221
242
  end
222
243
  end
223
-
224
-
244
+
245
+
225
246
  end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartfox
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
4
+ prerelease:
5
+ version: 0.4.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Richard Penwell
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2010-06-08 00:00:00 -04:00
13
+ date: 2011-02-28 00:00:00 -08:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -24,14 +19,9 @@ dependencies:
24
19
  requirement: &id001 !ruby/object:Gem::Requirement
25
20
  none: false
26
21
  requirements:
27
- - - ">="
22
+ - - ~>
28
23
  - !ruby/object:Gem::Version
29
- hash: 13
30
- segments:
31
- - 1
32
- - 2
33
- - 9
34
- version: 1.2.9
24
+ version: "2.0"
35
25
  type: :development
36
26
  version_requirements: *id001
37
27
  - !ruby/object:Gem::Dependency
@@ -42,9 +32,6 @@ dependencies:
42
32
  requirements:
43
33
  - - ">="
44
34
  - !ruby/object:Gem::Version
45
- hash: 3
46
- segments:
47
- - 0
48
35
  version: "0"
49
36
  type: :runtime
50
37
  version_requirements: *id002
@@ -56,9 +43,6 @@ dependencies:
56
43
  requirements:
57
44
  - - ">="
58
45
  - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 0
62
46
  version: "0"
63
47
  type: :runtime
64
48
  version_requirements: *id003
@@ -70,9 +54,6 @@ dependencies:
70
54
  requirements:
71
55
  - - ">="
72
56
  - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
57
  version: "0"
77
58
  type: :runtime
78
59
  version_requirements: *id004
@@ -87,7 +68,6 @@ extra_rdoc_files:
87
68
  - README.rdoc
88
69
  files:
89
70
  - .document
90
- - .gitignore
91
71
  - LICENSE
92
72
  - README.rdoc
93
73
  - Rakefile
@@ -113,8 +93,8 @@ homepage: http://github.com/penwellr/smartfox
113
93
  licenses: []
114
94
 
115
95
  post_install_message:
116
- rdoc_options:
117
- - --charset=UTF-8
96
+ rdoc_options: []
97
+
118
98
  require_paths:
119
99
  - lib
120
100
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -122,23 +102,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
102
  requirements:
123
103
  - - ">="
124
104
  - !ruby/object:Gem::Version
125
- hash: 3
126
- segments:
127
- - 0
128
105
  version: "0"
129
106
  required_rubygems_version: !ruby/object:Gem::Requirement
130
107
  none: false
131
108
  requirements:
132
109
  - - ">="
133
110
  - !ruby/object:Gem::Version
134
- hash: 3
135
- segments:
136
- - 0
137
111
  version: "0"
138
112
  requirements: []
139
113
 
140
114
  rubyforge_project:
141
- rubygems_version: 1.3.7
115
+ rubygems_version: 1.5.2
142
116
  signing_key:
143
117
  specification_version: 3
144
118
  summary: Client library for SmartFoxServer
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC