smsc_manager 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,31 +7,44 @@ module SmscManager
7
7
  # this class helps to broadcast sms to list
8
8
  class Broadcast
9
9
  @@MAX_THROUGHPUT =5 # in messages per second
10
- attr_accessor :text, :source, :list, :num_threads, :attempts, :sent
11
- def initialize(txt,lst,src='888')
12
- @guard = Mutex.new
13
- self.text=txt
14
- self.list=lst
10
+ # old attr_accessor :text, :source, :list, :num_threads, :attempts, :sent
11
+ attr_accessor :text, :source, :list, :num_threads, :attempts, :sent
12
+ def common_setup(src)
13
+ @guard = Mutex.new
15
14
  self.attempts=0
16
15
  self.sent=0
17
- # puts "lst.size is #{lst.size}"
18
- raise BadList.new("use send_sms for lists of size 1") if lst.class==String
19
16
  self.source=src
20
- self.calculate_threads
17
+ end
18
+ # initialize with list of destionations, texts eg different text for each destination
19
+ # initialize with common text and list of destinations
20
+ def initialize(src, lst, txt=nil)
21
+ common_setup(src)
22
+ self.list=lst
23
+ self.text=txt
24
+ # puts "lst.size is #{lst.size}"
25
+ raise BadList.new("use send_sms for lists of size 1") if lst.class==String
21
26
  @list_queue=Queue.new
22
- self.populate_queue(lst)
27
+ self.populate_queue(lst)
23
28
  self.send
24
29
  # raise InvalidPrefix.new("invalid prefix: valid prefix area:" + Sms.valid ) if !prefix_test
25
30
  end
31
+
26
32
  # populate thread safe queue
27
33
  def populate_queue(lst)
28
-
29
- # puts "list is #{lst}"
30
- lst.each {|dst| @list_queue << dst
34
+ puts "list is #{lst}"
35
+ lst.each {|key, val|
36
+ # txt=line[1] ||
37
+ # if value set then send it else send default text value
38
+ txt2 = val==nil ? self.text : val
39
+ dst = key
40
+ puts "text is #{txt2} dest is #{dst}"
41
+ sms=SmscManager::Sms.new(txt2,dst,self.source)
42
+ @list_queue << sms
31
43
  # puts " dst is #{dst}"
32
44
  }
33
45
  puts "populate queue list size #{@list_queue.size}"
34
46
  end
47
+
35
48
  #calculate number of threads
36
49
  def calculate_threads
37
50
  self.num_threads = @@MAX_THROUGHPUT +1 #sleep 1 after every message
@@ -40,6 +53,7 @@ class Broadcast
40
53
 
41
54
  # send using number of threads
42
55
  def send
56
+ self.calculate_threads
43
57
  smsc=SmscManager::SmscConnection.factory
44
58
  c=0
45
59
  thread_mgr=[]
@@ -49,9 +63,8 @@ class Broadcast
49
63
  thread_mgr << Thread.new(c+=1) { |ctmp|
50
64
  #puts " #{Time.now}Creating retry thread: #{ctmp}"
51
65
  begin
52
- dest = @list_queue.pop
53
- sms=SmscManager::Sms.new(self.text,dest,self.source)
54
- puts "Thread #{ctmp} destination: #{dest} text: #{self.text}"
66
+ sms = @list_queue.pop
67
+ puts "Thread #{ctmp} destination: #{sms.destination} text: #{sms.text}"
55
68
  self.send_sms(smsc,sms)
56
69
  end until @list_queue.empty?
57
70
  }
@@ -2,9 +2,10 @@
2
2
  module SmscManager
3
3
  class InvalidPrefix < RuntimeError
4
4
  end
5
- # this class defines setting up a sms
5
+ # this class defines creating a sms
6
+ # and strips out the unnecessary junk
6
7
  class Sms
7
- @@MAX_SIZE=1500 # 3*160 # max 3 sms
8
+ @@MAX_SIZE=1500 # 3*160 # max 1500 characters, change if your smsc suports less
8
9
  @@msisdn_valid_prefix= %w{ 63999 999 0999 1000 888 +63999 }
9
10
  attr_accessor :text, :source, :destination, :orig_txt
10
11
  def self.max_length
@@ -2,7 +2,7 @@ module SmscManager #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 3
5
- TINY = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -42,22 +42,27 @@ class SmscManagerTest < Test::Unit::TestCase
42
42
  end
43
43
  def test_broadcast_two
44
44
  list = %w(9991 9992)
45
- b=SmscManager::Broadcast.new("hello there",list)
45
+ b=SmscManager::Broadcast.new('888',list,"hello there")
46
46
  assert b.attempts ==2, "did not send two sms"
47
47
  end
48
48
  def test_broadcast_five
49
49
  list = %w(9991 9992 9993 9994 9995)
50
- b=SmscManager::Broadcast.new("hello there",list)
50
+ b=SmscManager::Broadcast.new('888',list,"hello there")
51
51
  assert b.attempts ==5, "did not send 5 sms"
52
52
  end
53
53
  def test_broadcast_12
54
54
  list = %w(9991 9992 9993 9994 9995 9996 99910 99920 99930 99940 99950 99960)
55
- b=SmscManager::Broadcast.new("hello there",list)
55
+ b=SmscManager::Broadcast.new('888',list,"hello there")
56
56
  assert b.attempts ==12, "did not send 12 sms"
57
57
  end
58
+ def test_broadcast_multi_text
59
+ list = {'9991' => 'text1', '9992' => 'text2', '9993' => 'text3'}
60
+ b=SmscManager::Broadcast.new('888',list)
61
+ assert b.attempts ==3, "did not send 3 sms"
62
+ end
58
63
  def test_broadcast_six
59
64
  list = %w(9991 9992 9993 9994 9995 9996)
60
- b=SmscManager::Broadcast.new("second hello there",list)
65
+ b=SmscManager::Broadcast.new('888',list,"second hello there")
61
66
  assert b.attempts ==6, "did not send 6 sms"
62
67
  end
63
68
  def test_find_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.3
7
- date: 2007-03-21 00:00:00 +08:00
6
+ version: 0.3.4
7
+ date: 2007-03-22 00:00:00 +08:00
8
8
  summary: connection to smsc via http using kannel
9
9
  require_paths:
10
10
  - lib