Make sure touch events arrive in correct order.

This commit is contained in:
Simo Kinnunen
2014-04-03 17:13:17 +09:00
parent ceeda2b990
commit c33f0eab09
6 changed files with 68 additions and 22 deletions

View File

@@ -248,7 +248,8 @@ module.exports = function(options) {
push.send([
channel
, wireutil.envelope(new Klass(
data.x
data.seq
, data.x
, data.y
))
])

View File

@@ -7,6 +7,7 @@ var devutil = require('../../../util/devutil')
var logger = require('../../../util/logger')
var lifecycle = require('../../../util/lifecycle')
var streamutil = require('../../../util/streamutil')
var SeqQueue = require('../../../wire/seqqueue')
module.exports = syrup.serial()
.dependency(require('../support/adb'))
@@ -49,24 +50,35 @@ module.exports = syrup.serial()
return openService()
.then(function(monkey) {
var queue = new SeqQueue()
router
.on(wire.TouchDownMessage, function(channel, message) {
monkey.touchDownAsync(message.x, message.y)
.catch(function(err) {
log.error('touchDown failed', err.stack)
})
queue.push(message.seq, function() {
monkey.touchDownAsync(message.x, message.y)
.catch(function(err) {
log.error('touchDown failed', err.stack)
})
})
})
.on(wire.TouchMoveMessage, function(channel, message) {
monkey.touchMoveAsync(message.x, message.y)
.catch(function(err) {
log.error('touchMove failed', err.stack)
})
queue.push(message.seq, function() {
monkey.touchMoveAsync(message.x, message.y)
.catch(function(err) {
log.error('touchMove failed', err.stack)
})
})
})
.on(wire.TouchUpMessage, function(channel, message) {
monkey.touchUpAsync(message.x, message.y)
.catch(function(err) {
log.error('touchUp failed', err.stack)
})
queue.push(message.seq, function() {
monkey.touchUpAsync(message.x, message.y)
.catch(function(err) {
log.error('touchUp failed', err.stack)
})
})
// Reset queue
queue = new SeqQueue()
})
.on(wire.TapMessage, function(channel, message) {
monkey.tapAsync(message.x, message.y)