Skip to content

Commit 02ff6c6

Browse files
committed
Added support for a sequence strategy to allow persistent sequences
1 parent 9a079a4 commit 02ff6c6

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

smpplib/client.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,18 @@
3333

3434
logger = logging.getLogger('smpplib.client')
3535

36+
class SimpleSequenceStrategy(object):
37+
38+
def __init__(self):
39+
self._sequence = 1
40+
41+
@property
42+
def sequence(self):
43+
return self._sequence
44+
45+
def next_sequence(self):
46+
self._sequence += 1
47+
return self._sequence
3648

3749
class Client(object):
3850
"""SMPP client class"""
@@ -43,16 +55,17 @@ class Client(object):
4355
port = None
4456
vendor = None
4557
_socket = None
46-
sequence = 1
58+
sequence_strategy = None
4759

48-
def __init__(self, host, port, timeout=5):
60+
def __init__(self, host, port, timeout=5, sequence_strategy=None):
4961
"""Initialize"""
5062

5163
self.host = host
5264
self.port = int(port)
5365
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
5466
self._socket.settimeout(timeout)
5567
self.receiver_mode = False
68+
self.sequence_strategy = sequence_strategy or SimpleSequenceStrategy()
5669

5770
def __del__(self):
5871
"""Disconnect when client object is destroyed"""
@@ -66,6 +79,10 @@ def __del__(self):
6679
logger.warning('%s. Ignored', e)
6780
self.disconnect()
6881

82+
@property
83+
def sequence(self):
84+
return self.sequence_strategy.sequence
85+
6986
def connect(self):
7087
"""Connect to SMSC"""
7188

smpplib/pdu.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ def _set_sequence(self, sequence):
7171

7272
def _next_seq(self):
7373
"""Return next sequence number"""
74-
self._client.sequence += 1
75-
return self._client.sequence
74+
return self._client.sequence_strategy.next_sequence()
7675

7776
def is_vendor(self):
7877
"""Return True if this is a vendor PDU, False otherwise"""

0 commit comments

Comments
 (0)