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:
parent
66900c7fe7
commit
6b701f3421
|
@ -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.
|
||||
]
|
||||
]
|
||||
|
|
25
Tests.st
25
Tests.st
|
@ -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 [
|
||||
|
|
Reference in New Issue