conn: Remember the sequence number we expect as response and dispatch
This is lacking timeout and sanity checking. E.g. we want to make sure we get a response within the next XYZ seconds and we want the system to check that the response belongs to the request we sent.
This commit is contained in:
parent
38fb0d2745
commit
6502e32773
|
@ -17,7 +17,7 @@
|
||||||
"
|
"
|
||||||
|
|
||||||
Osmo.OsmoStreamSocketBase subclass: SMPPConnection [
|
Osmo.OsmoStreamSocketBase subclass: SMPPConnection [
|
||||||
| writeQueue nextSeq systemId password systemType |
|
| writeQueue nextSeq systemId password systemType pendingCommands |
|
||||||
<category: 'SMPP-Connection'>
|
<category: 'SMPP-Connection'>
|
||||||
|
|
||||||
createConnection: aHostname port: aPort [
|
createConnection: aHostname port: aPort [
|
||||||
|
@ -56,15 +56,19 @@ Osmo.OsmoStreamSocketBase subclass: SMPPConnection [
|
||||||
|
|
||||||
self send: (SMPPMessage new
|
self send: (SMPPMessage new
|
||||||
header: header;
|
header: header;
|
||||||
body: body)
|
body: body) onResponse: [:resp | ].
|
||||||
]
|
]
|
||||||
|
|
||||||
send: aMessage [
|
send: aMessage onResponse: aBlock [
|
||||||
| seq |
|
| seq key |
|
||||||
seq := nextSeq.
|
seq := nextSeq.
|
||||||
nextSeq := nextSeq + 1.
|
nextSeq := nextSeq + 1.
|
||||||
|
|
||||||
aMessage header sequenceNumber: seq.
|
aMessage header sequenceNumber: seq.
|
||||||
|
|
||||||
|
"Remember that we want a response. TODO add timeout handling"
|
||||||
|
pendingCommands at: seq put: aBlock.
|
||||||
|
|
||||||
writeQueue nextPut: aMessage toMessage asByteArray
|
writeQueue nextPut: aMessage toMessage asByteArray
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -72,6 +76,7 @@ Osmo.OsmoStreamSocketBase subclass: SMPPConnection [
|
||||||
super connect.
|
super connect.
|
||||||
nextSeq := 1.
|
nextSeq := 1.
|
||||||
writeQueue := SharedQueue new.
|
writeQueue := SharedQueue new.
|
||||||
|
pendingCommands := Dictionary new.
|
||||||
self scheduleBindTrx.
|
self scheduleBindTrx.
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -108,5 +113,13 @@ Osmo.OsmoStreamSocketBase subclass: SMPPConnection [
|
||||||
]
|
]
|
||||||
|
|
||||||
receviedResponse: aMessage [
|
receviedResponse: aMessage [
|
||||||
|
| seq block |
|
||||||
|
"Search for a response"
|
||||||
|
seq := aMessage header sequenceNumber.
|
||||||
|
block := pendingCommands removeKey: seq ifAbsent: [
|
||||||
|
"TODO: log it"
|
||||||
|
^false].
|
||||||
|
|
||||||
|
block value: aMessage
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
Reference in New Issue