roSequenceMatcher
Este objeto se utiliza para enviar eventos roSequenceMatchEvent cuando coinciden los patrones de secuencia de bytes especificados. Una vez que un patrón ha coincidido y el evento ha sido publicado, todos los bytes contribuyentes se descartan. Como resultado, si un patrón es un prefijo de otro patrón, entonces el segundo patrón, más largo, nunca coincidirá con el objeto.
Este objeto proporciona tanto una interfaz estándar como una interfaz sobrecargada para enviar eventos a un puerto de mensajes.
ifMessagePort
SetPort(port As roMessagePort)
Publica mensajes de tipo roSequenceMatchEvent en el puerto de mensajes adjunto.
ifSequenceMatcher
SetPort(a As Object)
Especifica el puerto de mensajes donde se publicarán los objetos roSequenceMatchEvent.
Add(pattern As Object, user_data As Object) As Boolean
Agrega un patrón para que la instancia del objeto roSequenceMatcher lo haga coincidir. El patrón debe especificarse como un objeto que pueda convertirse en una secuencia de bytes (por ejemplo, roByteArray, roString). Para los datos de usuario, pase el objeto que debe devolverse si el patrón especificado coincide.
Ejemplo
Function FromHex(hex as String) as Object
bytes = CreateObject("roByteArray")
bytes.FromHexString(hex)
return bytes
End Function
Sub Main()
serial = CreateObject("roSerialPort", 1, 115200)
mp = CreateObject("roMessagePort")
button1_seq = FromHex("080a01040001e000")
button2_seq = FromHex("080e01040001e000")
matcher = CreateObject("roSequenceMatcher")
matcher.SetMessagePort(mp)
matcher.Add(button1_seq, { name: "button1" })
matcher.Add(button2_seq, { name: "button2" })
matcher.Add("flibbet", { name: "flibbet" })
matcher.Add("flobbet", { name: "flobbet" })
if not serial.SetMatcher(matcher) then
stop
end if
finished = false
while not finished
ev = mp.WaitMessage(10000)
if ev = invalid then
finished = true
else if type(ev) = "roSequenceMatchEvent" then
print "Got button: "; ev.GetUserData().name
else
print "Unexpected event: "; type(ev)
end if
end while
End Sub