smsc_manager 0.3.1 → 0.3.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/Manifest.txt CHANGED
@@ -4,11 +4,12 @@ CHANGELOG.txt
4
4
  Manifest.txt
5
5
  setup.rb
6
6
  config/smsc.yml
7
- bin/config_smsc.rb
8
- bin/print_smsc_config.rb
7
+ bin/smsc_config.rb
8
+ bin/smsc_print_config.rb
9
9
  bin/send_sms.rb
10
10
  lib/smsc_manager/version.rb
11
11
  lib/smsc_manager/sms.rb
12
+ lib/smsc_manager/broadcast.rb
12
13
  lib/smsc_manager/smsc_connection.rb
13
14
  lib/smsc_manager.rb
14
15
  test/test_helper.rb
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  if ARGV.size !=4
3
- puts "Usage: config_smsc.rb hostname username password port"
3
+ puts "Usage: smsc_config.rb hostname username password port"
4
4
  exit
5
5
  end
6
6
 
@@ -14,6 +14,6 @@ require 'pp'
14
14
  puts "exception found"
15
15
  puts "#{e.backtrace}"
16
16
  ensure
17
- puts 'please run config_smsc script as no smsc found' if smsc==nil
17
+ puts 'please run smsc_config.rb script as no smsc found' if smsc==nil
18
18
  end
19
19
 
@@ -0,0 +1,68 @@
1
+ # Sms stuff for handling sms
2
+ #require 'monitor'
3
+ require 'thread'
4
+ module SmscManager
5
+ class UseSend_SmsForListofSize1 < RuntimeError
6
+ end
7
+ # this class helps to broadcast sms to list
8
+ class Broadcast
9
+ @@MAX_THROUGHPUT =5 # in messages per second
10
+ attr_accessor :text, :source, :list, :num_threads
11
+ def initialize(txt,lst,src='888')
12
+ self.text=txt
13
+ self.list=lst
14
+ raise UseSend_SmsForListofSize1.new("use send_sms for lists of size 1") if lst.size==1
15
+ self.source=src
16
+ self.calculate_threads
17
+ @list_queue=Queue.new
18
+ self.populate_queue(lst)
19
+ self.send
20
+ # raise InvalidPrefix.new("invalid prefix: valid prefix area:" + Sms.valid ) if !prefix_test
21
+ end
22
+ # populate thread safe queue
23
+ def populate_queue(lst)
24
+
25
+ # puts "list is #{lst}"
26
+ lst.each {|dst| @list_queue << dst
27
+ # puts " dst is #{dst}"
28
+ }
29
+ puts "populate queue list size #{@list_queue.size}"
30
+ end
31
+ #calculate number of threads
32
+ def calculate_threads
33
+ self.num_threads = @@MAX_THROUGHPUT +1 #sleep 1 after every message
34
+ self.num_threads =1 if self.list.size<=@@MAX_THROUGHPUT
35
+ end
36
+
37
+ # send using number of threads
38
+ def send
39
+ smsc=SmscManager::SmscConnection.factory
40
+ c=0
41
+ thread_mgr=[]
42
+ puts "queue size is #{@list_queue.size} "
43
+ puts "queue empty is #{@list_queue.empty?}"
44
+ while c < self.num_threads
45
+ thread_mgr << Thread.new(c+=1) { |ctmp|
46
+ #puts " #{Time.now}Creating retry thread: #{ctmp}"
47
+ begin
48
+ dest = @list_queue.pop
49
+ sms=SmscManager::Sms.new(self.text,dest,self.source)
50
+ puts "Thread #{ctmp} destination: #{dest} text: #{self.text}"
51
+ self.send_sms(smsc,sms)
52
+ end until @list_queue.empty?
53
+ }
54
+ end
55
+ thread_mgr.each { |aThread| aThread.join if aThread.alive? } #wait till all end
56
+ end
57
+ protected
58
+ def send_sms(smsc,sms)
59
+ begin
60
+ res= smsc.send(sms)
61
+ rescue Exception => e
62
+ puts "Exception found #{e.message}"
63
+ ensure
64
+ sleep(1)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -2,7 +2,7 @@ module SmscManager #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 3
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -8,7 +8,7 @@ class SmscManagerTest < Test::Unit::TestCase
8
8
  # Replace this with your real tests.
9
9
  def test_sms_send
10
10
  smsc_new=@smsc
11
- sms=SmscManager::Sms.new('hello scott','09896557890','websource')
11
+ sms=SmscManager::Sms.new('hello scott','09996557890','websource')
12
12
  begin
13
13
  r=smsc_new.test(sms)
14
14
  rescue Exception
@@ -37,9 +37,25 @@ class SmscManagerTest < Test::Unit::TestCase
37
37
 
38
38
  end
39
39
  def test_sms_text_nil
40
- sms=SmscManager::Sms.new(nil,'09896557890','websource')
41
- assert sms.text==" ", "text not correct"
40
+ sms=SmscManager::Sms.new(nil,'09996557890','websource')
41
+ assert sms.text==" ", "text not correct for nil"
42
42
  end
43
+ def test_broadcast_two
44
+ list = %w(9991 9992)
45
+ b=SmscManager::Broadcast.new("hello there",list)
46
+ end
47
+ def test_broadcast_five
48
+ list = %w(9991 9992 9993 9994 9995 9996)
49
+ b=SmscManager::Broadcast.new("hello there",list)
50
+ end
51
+ def test_broadcast_ten
52
+ list = %w(9991 9992 9993 9994 9995 9996 99910 99920 99930 99940 99950 99960)
53
+ b=SmscManager::Broadcast.new("hello there",list)
54
+ end
55
+ def test_broadcast_six
56
+ list = %w(9991 9992 9993 9994 9995 9996 9997)
57
+ b=SmscManager::Broadcast.new("second hello there",list)
58
+ end
43
59
  def test_find_google_mod
44
60
  @smsc.hostname='www.google.com'
45
61
  #assert @smsc.save==true, 'could not save google mod'
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: smsc_manager
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.3.1
7
- date: 2007-03-19 00:00:00 +08:00
6
+ version: 0.3.2
7
+ date: 2007-03-21 00:00:00 +08:00
8
8
  summary: connection to smsc via http using kannel
9
9
  require_paths:
10
10
  - lib
@@ -35,11 +35,12 @@ files:
35
35
  - Manifest.txt
36
36
  - setup.rb
37
37
  - config/smsc.yml
38
- - bin/config_smsc.rb
39
- - bin/print_smsc_config.rb
38
+ - bin/smsc_config.rb
39
+ - bin/smsc_print_config.rb
40
40
  - bin/send_sms.rb
41
41
  - lib/smsc_manager/version.rb
42
42
  - lib/smsc_manager/sms.rb
43
+ - lib/smsc_manager/broadcast.rb
43
44
  - lib/smsc_manager/smsc_connection.rb
44
45
  - lib/smsc_manager.rb
45
46
  - test/test_helper.rb
@@ -52,8 +53,8 @@ rdoc_options: []
52
53
  extra_rdoc_files: []
53
54
 
54
55
  executables:
55
- - config_smsc.rb
56
- - print_smsc_config.rb
56
+ - smsc_config.rb
57
+ - smsc_print_config.rb
57
58
  - send_sms.rb
58
59
  extensions: []
59
60