mirror of
https://github.com/DeviceFarmer/stf.git
synced 2026-04-19 08:33:24 +02:00
Make sure touch events arrive in correct order.
This commit is contained in:
@@ -248,7 +248,8 @@ module.exports = function(options) {
|
||||
push.send([
|
||||
channel
|
||||
, wireutil.envelope(new Klass(
|
||||
data.x
|
||||
data.seq
|
||||
, data.x
|
||||
, data.y
|
||||
))
|
||||
])
|
||||
|
||||
@@ -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)
|
||||
|
||||
26
lib/wire/seqqueue.js
Normal file
26
lib/wire/seqqueue.js
Normal file
@@ -0,0 +1,26 @@
|
||||
function SeqQueue() {
|
||||
this.queue = []
|
||||
this.seq = 0
|
||||
}
|
||||
|
||||
SeqQueue.prototype.push = function(seq, handler) {
|
||||
this.queue[seq] = handler
|
||||
this.maybeDequeue()
|
||||
}
|
||||
|
||||
SeqQueue.prototype.done = function(seq, handler) {
|
||||
this.queue[seq] = handler
|
||||
this.maybeDequeue()
|
||||
}
|
||||
|
||||
SeqQueue.prototype.maybeDequeue = function() {
|
||||
var handler
|
||||
|
||||
while ((handler = this.queue[this.seq])) {
|
||||
this.queue[this.seq] = void 0
|
||||
handler()
|
||||
this.seq += 1
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = SeqQueue
|
||||
@@ -214,18 +214,21 @@ message PhysicalIdentifyMessage {
|
||||
}
|
||||
|
||||
message TouchDownMessage {
|
||||
required uint32 x = 1;
|
||||
required uint32 y = 2;
|
||||
required uint32 seq = 1;
|
||||
required uint32 x = 2;
|
||||
required uint32 y = 3;
|
||||
}
|
||||
|
||||
message TouchMoveMessage {
|
||||
required uint32 x = 1;
|
||||
required uint32 y = 2;
|
||||
required uint32 seq = 1;
|
||||
required uint32 x = 2;
|
||||
required uint32 y = 3;
|
||||
}
|
||||
|
||||
message TouchUpMessage {
|
||||
required uint32 x = 1;
|
||||
required uint32 y = 2;
|
||||
required uint32 seq = 1;
|
||||
required uint32 x = 2;
|
||||
required uint32 y = 3;
|
||||
}
|
||||
|
||||
message TapMessage {
|
||||
|
||||
Reference in New Issue
Block a user