Object subclass: SMPPCommand [ | body onTimeout onResult onError timeoutTimer connection | SMPPCommand class >> initWith: aBody [ ^self new body: aBody; yourself ] messageType [ ^body class messageType ] body [ ^body ] body: aBody [ body := aBody ] onResult: aBlock [ onResult := aBlock ] onError: aBlock [ onError := aBlock ] onTimeout: aBlock [ onTimeout := aBlock ] scheduledOn: aConnection [ connection := aConnection. timeoutTimer := Osmo.TimerScheduler instance scheduleInSeconds: 10 block: [self timeout]. ] timeout [ onTimeout ifNotNil: [:block | block value]. ] error: anError [ timeoutTimer cancel. onError ifNotNil: [:block | block value: anError]. ] result: aResult [ timeoutTimer cancel. onResult ifNotNil: [:block | block value: aResult]. ] ]