1
0
Fork 0

ipa: Make the IPADispatcher work on BlockClosures and add new API

Make the IPADispatcher work with BlockClosure. Add a new API to
register a block for a stream id. This will remove the requirement
of adding a dedicated selector.
This commit is contained in:
Holger Hans Peter Freyther 2012-07-28 20:45:21 +02:00
parent 66900c7fe7
commit 6b701f3421
2 changed files with 32 additions and 4 deletions

View File

@ -35,10 +35,13 @@ Object subclass: IPADispatcher [
]
addHandler: aStream on: anObject with: aSelector [
| handler |
<category: 'handler'>
handler := Array with: anObject with: aSelector.
handlers at: aStream put: handler.
handlers at: aStream put: [:msg | anObject perform: aSelector with: msg].
]
addHandler: aStream on: aBlock [
<category: 'handler'>
handlers at: aStream put: aBlock.
]
dispatch: aStream with: aData [
@ -49,6 +52,6 @@ Object subclass: IPADispatcher [
^ false
].
(handler first) perform: (handler second) with: aData.
handler value: aData.
]
]

View File

@ -201,6 +201,8 @@ TestCase subclass: SCCPTests [
]
TestCase subclass: IPATests [
| called |
IPATests class >> packageNamesUnderTest [
<category: 'accessing'>
^ #('OsmoNetwork')
@ -225,6 +227,29 @@ TestCase subclass: IPATests [
data do: [:each |
self assert: each first = each second.]
]
testDispatch [
| dispatch |
<category: 'dispatch-test'>
called := false.
dispatch := IPADispatcher new
addHandler: 16r23 on: self with: #dispatchcallback:;
yourself.
dispatch dispatch: 16r23 with: 'data'.
self assert: called.
called := false.
dispatch
addHandler: 16r42 on: [:msg | called := msg = 'data' ];
dispatch: 16r42 with: 'data'.
self assert: called.
]
dispatchcallback: aData [
<category: 'dispatch-test'>
called := aData = 'data'.
]
]
TestCase subclass: MessageBufferTest [