roSequenceMatcher
4 min
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