smsc_manager 0.3.1 → 0.3.2

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